Files
assistant-android/app/src/main/java/com/gh/gamecenter/SplashScreenActivity.java
huangzhuanghua 47914f94ac 修复部分bug
2016-09-29 18:32:55 +08:00

440 lines
14 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package com.gh.gamecenter;
import android.app.ActionBar;
import android.app.ActionBar.LayoutParams;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.util.DisplayMetrics;
import android.view.KeyEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.android.volley.Request;
import com.android.volley.Response;
import com.gh.base.AppController;
import com.gh.base.BaseActivity;
import com.gh.common.constant.Config;
import com.gh.common.util.FileUtils;
import com.gh.common.util.PackageUtils;
import com.gh.common.util.Utils;
import com.gh.gamecenter.db.info.FilterInfo;
import com.gh.gamecenter.eventbus.EBReuse;
import com.gh.gamecenter.manager.DataCollectionManager;
import com.gh.gamecenter.manager.FilterManager;
import com.gh.gamecenter.volley.extended.JsonArrayExtendedRequest;
import com.gh.gamecenter.volley.extended.JsonObjectExtendedRequest;
import com.gh.gamecenter.volley.extended.StringExtendedRequest;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Locale;
import java.util.Set;
import de.greenrobot.event.EventBus;
/**
* 引导页面
*
* @author 黄壮华
*
*/
public class SplashScreenActivity extends BaseActivity {
public static final String TAG = SplashScreenActivity.class.getSimpleName();
private SharedPreferences sp;
private String from;
private long start;
private boolean isFirst;
private Handler handler = new Handler();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
start = System.currentTimeMillis();
isFirst = true;
sp = getSharedPreferences(Config.PREFERENCE, Context.MODE_PRIVATE);
from = getIntent().getStringExtra("from");
if (sp.getBoolean("isNewFirstLaunch", true)
|| sp.getInt("actionbar_height", 0) != 0) {
setTheme(R.style.AppTheme_Guide);
} else {
setTheme(R.style.AppTheme_Fullscreen);
// 自定义ActionBar
ActionBar mActionBar = getActionBar();
if (mActionBar != null) {
mActionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
RelativeLayout relativeLayout = new RelativeLayout(this);
relativeLayout.setBackgroundResource(R.color.theme);
LayoutParams params = new LayoutParams(
LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
mActionBar.setCustomView(relativeLayout, params);// 自定义ActionBar布局
}
}
if (sp.getBoolean("isNewFirstLaunch", true)) {
setContentView(R.layout.activity_splash_intro);
ViewPager splash_viewPager = (ViewPager) findViewById(R.id.splash_viewPager);
splash_viewPager.setAdapter(new ViewPagerAdapter());
} else {
setContentView(R.layout.activity_splash_normal);
}
}
private class ViewPagerAdapter extends PagerAdapter {
private int[] pics = { R.drawable.splash_01, R.drawable.splash_02,
R.drawable.splash_03, R.drawable.splash_04 };
@Override
public int getCount() {
return pics.length;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
if (position == pics.length - 1) {
View view = View.inflate(SplashScreenActivity.this, R.layout.splash_viewpage_item, null);
TextView textView = (TextView) view.findViewById(R.id.splash_viewPager_item_btn);
DisplayMetrics outMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(outMetrics);
RelativeLayout.LayoutParams rparams = (RelativeLayout.LayoutParams) textView.getLayoutParams();
rparams.height = outMetrics.heightPixels / 4;
textView.setLayoutParams(rparams);
textView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
launch();
}
});
container.addView(view);
return view;
} else {
ImageView imageView = new ImageView(SplashScreenActivity.this);
imageView.setScaleType(ImageView.ScaleType.FIT_XY);
imageView.setImageResource(pics[position]);
ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
container.addView(imageView, params);
return imageView;
}
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View) object);
}
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
if (sp.getBoolean("isNewFirstLaunch", true)) {
launch();
} else {
return true;
}
}
return super.onKeyDown(keyCode, event);
}
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
if (hasFocus && isFirst) {
isFirst = false;
// 第一次启动把package.txt文件内容加载进数据库
if (!sp.getBoolean("isLoadFilter", false)) {
try {
List<FilterInfo> list = new ArrayList<>();
BufferedReader reader = new BufferedReader(
new InputStreamReader(getAssets().open("package.txt")));
String line;
while ((line = reader.readLine()) != null) {
list.add(new FilterInfo(line));
}
reader.close();
FilterManager filterManager = new FilterManager(getApplicationContext());
filterManager.addAllFilter(list);
sp.edit().putBoolean("isLoadFilter", true).apply();
} catch (IOException e) {
e.printStackTrace();
}
}
checkGhFile();
/*
* 更新过滤表获取自动刷新的cd获取版本对应表
*/
String time = sp.getString("filter_time", null);
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault());
String today = format.format(new Date());
if (!today.equals(time)) {
FilterManager manager = new FilterManager(getApplicationContext());
manager.getFilterFromServer(today);
// 获取版本代码、名称
getPlatform();
}
// 获取下载按钮状态、开启or关闭
getDownloadStatus();
getUISetting();
getTime();
/*
* 上传数据
*/
DataCollectionManager.getInstance(getApplicationContext()).upload();
// 不是第一次启动
if (!sp.getBoolean("isNewFirstLaunch", true)) {
int height = sp.getInt("actionbar_height", 0);
if (height == 0) {
final ActionBar actionBar = getActionBar();
if (actionBar != null) {
sp.edit().putInt("actionbar_height", actionBar.getHeight()).apply();
}
}
long end = System.currentTimeMillis() - start;
if (end < 3000) {
handler.postDelayed(new Runnable() {
@Override
public void run() {
launch();
}
}, 3000 - end);
} else {
launch();
}
}
}
}
/*
* 获取服务器时间
*/
private void getTime() {
StringExtendedRequest request = new StringExtendedRequest(
Request.Method.GET, Config.HOST + "v2d0/support/time/current",
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
if (response.matches("^[0-9]{10}$")) {
try {
Editor editor = sp.edit();
editor.putLong("server_time", Long.parseLong(response));
editor.putLong("client_time", System.currentTimeMillis() / 1000);
editor.apply();
} catch (NumberFormatException e) {
e.printStackTrace();
}
}
}
}, null);
request.setShouldCache(false);
AppController.addToRequestQueue(request, TAG);
}
/*
* 获取界面设置
*/
private void getUISetting() {
JsonObjectExtendedRequest request = new JsonObjectExtendedRequest(
Config.HOST + "v1d45/support/setting/ui",
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
Utils.log(response.toString());
try {
Editor editor = sp.edit();
editor.putInt("download_box_row",
response.getJSONObject("download_box").getInt("row"));
editor.putInt("download_box_column",
response.getJSONObject("download_box").getInt("column"));
editor.putInt("game_detail_news_type_tab_column",
response.getJSONObject("game_detail_news_type_tab").getInt("column"));
editor.apply();
} catch (JSONException e) {
e.printStackTrace();
}
}
}, null);
AppController.addToRequestQueue(request, TAG);
}
/*
* 获取下载按钮显示状态
*/
private void getDownloadStatus() {
String TD_CHANNEL_ID = (String) PackageUtils.getMetaData(this,
getPackageName(), "TD_CHANNEL_ID");
JsonObjectExtendedRequest request = new JsonObjectExtendedRequest(
Config.HOST + "v2d0/support/download_status?version=" + PackageUtils.getVersion(getApplicationContext())
+ "&channel=" + TD_CHANNEL_ID,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
String status = response.getString("status");
if ("on".equals(status)) {
sp.edit().putBoolean("isShow", true).apply();
} else {
sp.edit().putBoolean("isShow", false).apply();
}
EventBus.getDefault().post(new EBReuse("Refresh"));
} catch (JSONException e) {
e.printStackTrace();
}
}
}, null);
AppController.addToRequestQueue(request, TAG);
}
/*
* 检查下载文件夹下是否有旧版本的光环助手的包,有则删除
*/
private void checkGhFile() {
File folder = new File(FileUtils.getDownloadDir(this) + File.separator);
if (folder.isDirectory()) {
for (File file : folder.listFiles()) {
if (!file.isDirectory() && file.getName().startsWith("光环助手V")) {
String name = file.getName();
int index = name.indexOf("_");
if (index != -1) {
float version = Float.valueOf(name.substring(
name.indexOf("V") + 1, index));
float currentVersion = Float.valueOf(PackageUtils.getVersion(getApplicationContext()));
if (version <= currentVersion) {
file.delete();
}
}
}
}
}
}
private void getPlatform() {
JsonArrayExtendedRequest request = new JsonArrayExtendedRequest(
Config.HOST + "v1d45/support/setting/platform",
new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray response) {
try {
Set<String> pset = new HashSet<>();
for (int i = 0; i < response.length(); i++) {
JSONObject jsonObject = response
.getJSONObject(i);
String code = jsonObject.getString("code");
String name = jsonObject.getString("name");
String pic = jsonObject.getString("pic");
String color = jsonObject.getString("color");
pset.add(code + "=" + name + "=" + pic + "="
+ color);
}
SharedPreferences sharedPreferences = getSharedPreferences(
"gh_platform", Context.MODE_PRIVATE);
Editor editor = sharedPreferences.edit();
editor.putStringSet("platform", pset);
editor.apply();
} catch (JSONException e) {
e.printStackTrace();
}
}
}, null);
AppController.addToRequestQueue(request, TAG);
}
// 跳转到主界面
private void launch() {
Intent intent = new Intent(SplashScreenActivity.this, MainActivity.class);
Bundle bundle = getIntent().getExtras();
if (bundle != null && bundle.getString("to") != null) {
intentControl(bundle, intent);
} else {
intent.putExtra("from", from);
if ("plugin".equals(from)) {
intent.putExtra("packageName", getIntent().getStringExtra("packageName"));
} else if ("mipush_news".equals(from)) {
intent.putExtra("newsId", getIntent().getStringExtra("newsId"));
} else if ("mipush_plugin".equals(from)) {
intent.putExtra("data", getIntent().getStringExtra("data"));
} else if ("plugin_install".equals(from)) {
intent.putExtra("path", getIntent().getStringExtra("path"));
}
}
startActivity(intent);
finish();
}
private void intentControl(Bundle bundle, Intent intent) {
String to = bundle.getString("to");
if ("NewsActivity".equals(to) || "NewsDetailActivity".equals(to)) {
intent.putExtra("newsId", bundle.getString("newsId"));
intent.putExtra("entrance", bundle.getString("entrance"));
} else if("DownloadManagerActivity".equals(to)) {
intent.putExtra("packageName", bundle.getString("packageName"));
} else if ("GameDetailsActivity".equals(to) || "GameDetailActivity".equals(to)) {
intent.putExtra("gameId", bundle.getString("gameId"));
intent.putExtra("entrance", bundle.getString("entrance"));
} else if ("SubjectActivity".equals(to)) {
intent.putExtra("id", bundle.getString("id"));
intent.putExtra("name", bundle.getString("name"));
intent.putExtra("order", bundle.getBoolean("order"));
} else if ("ViewImageActivity".equals(to)) {
intent.putExtra("urls", bundle.getStringArrayList("urls"));
intent.putExtra("current", bundle.getInt("current",0));
intent.putExtra("ScaleType", bundle.getString("ScaleType"));
}
if ("NewsActivity".equals(to)) {
intent.putExtra("to", "NewsDetailActivity");
} else if ("GameDetailsActivity".equals(to)) {
intent.putExtra("to", "GameDetailActivity");
} else {
intent.putExtra("to", to);
}
}
}