diff --git a/app/src/main/java/com/gh/gamecenter/NewsActivity.java b/app/src/main/java/com/gh/gamecenter/NewsActivity.java index af5bc0faf4..6056361c0d 100644 --- a/app/src/main/java/com/gh/gamecenter/NewsActivity.java +++ b/app/src/main/java/com/gh/gamecenter/NewsActivity.java @@ -8,13 +8,16 @@ import android.os.Handler; import android.os.Message; import android.os.SystemClock; import android.support.v4.util.ArrayMap; +import android.support.v4.view.MotionEventCompat; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.text.Html; import android.text.Spanned; import android.text.TextUtils; import android.util.DisplayMetrics; +import android.util.Log; import android.view.LayoutInflater; +import android.view.MotionEvent; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; @@ -126,6 +129,22 @@ public class NewsActivity extends BaseActivity implements OnClickListener { private Handler handler = new Handler(); + + private float Y11; + private float Y12; + private float Y21; + private float Y22; + private float X11; + private float X12; + private float X21; + private float X22; + private boolean isSecondDown = false; + double R11; + int mActivePointerId; + WebSettings webSettings; + private int defaultTextZoom = 100; + private int scrollSize = 300;//滑动距离超过300触发事件(放大缩小字体) + private DataWatcher dataWatcher = new DataWatcher() { @Override public void onDataChanged( @@ -172,6 +191,21 @@ public class NewsActivity extends BaseActivity implements OnClickListener { statusMap = new ArrayMap(); WebView essaydetails_webView = (WebView) findViewById(R.id.essaydetails_webView); + essaydetails_webView.setOnTouchListener(new View.OnTouchListener() { + @Override + public boolean onTouch(View v, MotionEvent event) { + switch (event.getAction()) { + case MotionEvent.ACTION_POINTER_DOWN: + Log.e("MotionEvent", "ACTION_POINTER_DOWN"); + break; + case MotionEvent.ACTION_POINTER_UP: + Log.e("MotionEvent", "ACTION_POINTER_UP"); + break; + } + return false; + } + }); + if (NetworkUtils.isWifiConnected(this)) { essaydetails_webView.setVisibility(View.INVISIBLE); if (newsId != null) { @@ -230,6 +264,71 @@ public class NewsActivity extends BaseActivity implements OnClickListener { } } + /** + * 增加手势监听,控制字体大小 + * + * @author 柯皓源 + */ + @Override + public boolean dispatchTouchEvent(MotionEvent ev) { + + switch (ev.getAction() & MotionEventCompat.ACTION_MASK) { + case MotionEvent.ACTION_DOWN: + isSecondDown = false; + mActivePointerId = MotionEventCompat.getPointerId(ev, 0); + int pointerIndex = MotionEventCompat.findPointerIndex(ev, mActivePointerId); + Y11 = MotionEventCompat.getY(ev, pointerIndex); + X11 = MotionEventCompat.getX(ev, pointerIndex); + break; + case MotionEvent.ACTION_UP: + final int actionUpIndex = MotionEventCompat.getActionIndex(ev); + mActivePointerId = MotionEventCompat.getPointerId(ev, actionUpIndex); + int pointerIndex2 = MotionEventCompat.findPointerIndex(ev, mActivePointerId); + Y12 = MotionEventCompat.getY(ev, pointerIndex2); + X12 = MotionEventCompat.getX(ev, pointerIndex2); + float X2 = Math.abs(X12 - X22); + float Y2 = Math.abs(Y12 - Y22); + float R2 = (X2 * X2) + (Y2 * Y2); + double R12 = Math.sqrt(R2); + if (isSecondDown && webSettings != null) { + if ((R11 - R12) > scrollSize) { + defaultTextZoom -= 10; + webSettings.setTextZoom(defaultTextZoom); + } + if ((R11 - R12) < -scrollSize) { + defaultTextZoom += 10; + webSettings.setTextZoom(defaultTextZoom); + } + } + break; + case MotionEvent.ACTION_MOVE: + if (isSecondDown) { + return true; + } + break; + case MotionEventCompat.ACTION_POINTER_DOWN: + isSecondDown = true; + final int pointerIndexDown = MotionEventCompat.getActionIndex(ev); + mActivePointerId = MotionEventCompat.getPointerId(ev, pointerIndexDown); + int pointerIndex1 = MotionEventCompat.findPointerIndex(ev, mActivePointerId); + Y21 = MotionEventCompat.getY(ev, pointerIndex1); + X21 = MotionEventCompat.getX(ev, pointerIndex1); + float X1 = Math.abs(X11 - X21); + float Y1 = Math.abs(Y11 - Y21); + float R1 = (X1 * X1) + (Y1 * Y1); + R11 = Math.sqrt(R1); + break; + case MotionEventCompat.ACTION_POINTER_UP: + final int pointerIndexUp = MotionEventCompat.getActionIndex(ev); + mActivePointerId = MotionEventCompat.getPointerId(ev, pointerIndexUp); + int pointerIndex21 = MotionEventCompat.findPointerIndex(ev, mActivePointerId); + Y22 = MotionEventCompat.getY(ev, pointerIndex21); + X22 = MotionEventCompat.getX(ev, pointerIndex21); + break; + } + return super.dispatchTouchEvent(ev); + } + private void getNewDigest(final String news_id) { JsonObjectExtendedRequest request = new JsonObjectExtendedRequest( Config.HOST + "v1d45/news/" + news_id + "/digest", @@ -563,7 +662,7 @@ public class NewsActivity extends BaseActivity implements OnClickListener { } else { DialogUtils.showDialog(NewsActivity.this, path); } - } else if("等待".equals(str)){ + } else if ("等待".equals(str)) { } else { statusMap.put(downloadEntry.getUrl(), "pause"); @@ -660,7 +759,8 @@ public class NewsActivity extends BaseActivity implements OnClickListener { public void onResponse(JSONArray response) { Utils.log(response); if (!isDestroy) { - Type listType = new TypeToken>() {}.getType(); + Type listType = new TypeToken>() { + }.getType(); Gson gson = new Gson(); List list = gson.fromJson( response.toString(), listType); @@ -1040,7 +1140,7 @@ public class NewsActivity extends BaseActivity implements OnClickListener { for (int i = 0, size = gameEntity.getApk().size(); i < size; i++) { ApkEntity apkEntity = gameEntity.getApk().get(i); if ("9u".equals(apkEntity.getPlatform())) { - holder.essaydetails_info.setText("V" + apkEntity.getVersion() + " | " + apkEntity.getSize()); + holder.essaydetails_info.setText("V" + apkEntity.getVersion() + " | " + apkEntity.getSize()); break; } if (i == size - 1) { @@ -1066,7 +1166,7 @@ public class NewsActivity extends BaseActivity implements OnClickListener { holder.essaydetails_time.setText("昨天 " + format.format(day)); } else { format.applyPattern("yyyy年MM月dd日 HH:mm"); - holder.essaydetails_time .setText(format.format(day)); + holder.essaydetails_time.setText(format.format(day)); } } catch (ParseException e) { e.printStackTrace(); @@ -1078,7 +1178,7 @@ public class NewsActivity extends BaseActivity implements OnClickListener { } if (holder.essaydetails_wv_content.getTag() == null) { holder.essaydetails_wv_content.addJavascriptInterface(new JsInterface(NewsActivity.this), "imagelistener"); - WebSettings webSettings = holder.essaydetails_wv_content.getSettings(); + webSettings = holder.essaydetails_wv_content.getSettings(); webSettings.setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN); webSettings.setJavaScriptEnabled(true); holder.essaydetails_wv_content.loadDataWithBaseURL(null, entity.getContent(), "text/html", "utf-8", null); diff --git a/app/src/main/java/com/gh/gamecenter/SettingActivity.java b/app/src/main/java/com/gh/gamecenter/SettingActivity.java index 840d569986..03261f22b1 100644 --- a/app/src/main/java/com/gh/gamecenter/SettingActivity.java +++ b/app/src/main/java/com/gh/gamecenter/SettingActivity.java @@ -10,11 +10,14 @@ import android.os.Handler; import android.text.Html; import android.text.Spanned; import android.text.TextUtils; +import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.Window; import android.widget.ProgressBar; +import android.widget.RadioGroup; import android.widget.TextView; +import android.widget.Toast; import com.android.volley.Response; import com.android.volley.VolleyError; @@ -46,535 +49,563 @@ import java.util.HashMap; import java.util.Map.Entry; /** - * * 游戏设置页面 - * + * * @author 吕方 * @since 0814 - * */ public class SettingActivity extends BaseActivity implements OnClickListener { - private SwitchButton setting_sb_autoinstall, setting_sb_autodelete, - setting_sb_deletedata, setting_sb_autoupdate; - private TextView setting_tv_version, app_tv_speed, app_tv_percent, - app_btn_cancel, setting_tv_cache; - private ProgressBar app_pb_progress; - - private SharedPreferences sp; - - private Dialog dialog = null; - - private AppEntity appEntity; - - private boolean isChecking = false; - private boolean isShowDownload = false; - - private Handler handler = new Handler(); - - private DataWatcher dataWatcher = new DataWatcher() { - - @Override - public void onDataChanged(HashMap downloads) { - for (Entry entry : downloads.entrySet()) { - DownloadEntry downloadEntry = entry.getValue(); - if (downloadEntry.getName().contains("光环助手") && isShowDownload) { - app_tv_speed.setText(SpeedUtils.getSpeed(downloadEntry - .getSpeed()) - + "(剩" - + SpeedUtils.getRemainTime(downloadEntry.getSize(), - downloadEntry.getProgress(), - downloadEntry.getSpeed() * 1024) + ")"); - app_pb_progress.setProgress((int) (downloadEntry - .getPercent() * 10)); - app_tv_percent.setText(downloadEntry.getPercent() + "%"); - if (DownloadStatus.done.equals(downloadEntry.getStatus())) { - DownloadManager.getInstance(getApplicationContext()) - .cancel(downloadEntry.getUrl(), false); - if (appEntity != null && appEntity.isIs_force()) { - AppController.getInstance().finishActivity(); - } else { - if (dialog != null) { - dialog.dismiss(); - } - isShowDownload = false; - } - } - } - } - } - - }; - - @Override - public void finish() { - saveCurrentSetting(); - super.finish(); - } - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - View contentView = View.inflate(this, R.layout.activity_setting, null); - - init(contentView, "设置"); - - findViewById(R.id.setting_rl_autoinstall).setOnClickListener(this); - findViewById(R.id.setting_rl_autodelete).setOnClickListener(this); - findViewById(R.id.setting_rl_deletedata).setOnClickListener(this); - findViewById(R.id.setting_rl_autoupdate).setOnClickListener(this); - findViewById(R.id.setting_rl_update).setOnClickListener(this); - findViewById(R.id.setting_rl_feedback).setOnClickListener(this); - findViewById(R.id.setting_rl_cache).setOnClickListener(this); - - if (AppController.get("user", false) != null) { - findViewById(R.id.setting_tv_account).setOnClickListener(this); - } else { - findViewById(R.id.setting_tv_account).setVisibility(View.GONE); - } - - setting_tv_version.setText("当前版本:V" - + PackageUtils.getVersion(getApplicationContext())); - - setting_tv_cache.setText(getCacheSize()); - - sp = getSharedPreferences(Config.PREFERENCE, Activity.MODE_PRIVATE); - - setting_sb_autoinstall.setChecked(sp.getBoolean("autoinstall", true)); - setting_sb_autodelete.setChecked(sp.getBoolean("autodelete", true)); - setting_sb_deletedata.setChecked(sp.getBoolean("deletedata", true)); - setting_sb_autoupdate.setChecked(sp.getBoolean("autoupdate", true)); - - if (sp.getBoolean("isShowDisclaimer", false)) { - TextView setting_tv_disclaimer = (TextView) findViewById(R.id.setting_tv_disclaimer); - setting_tv_disclaimer.setVisibility(View.VISIBLE); - setting_tv_disclaimer.setOnClickListener(this); - } - } - - // 获取缓存大小 - private String getCacheSize() { - File ecDir = getExternalCacheDir(); - long cacheLength = getFolderSize(getCacheDir()); - if (ecDir != null) { - cacheLength += getFolderSize(ecDir); - } - return long2Size(cacheLength); - } - - private long getFolderSize(File folder) { - long size = 0; - size += folder.length(); - if (folder.isDirectory()) { - for (File file : folder.listFiles()) { - if (file.isDirectory()) { - size += getFolderSize(file); - } else { - size += file.length(); - } - } - } - return size; - } - - private String long2Size(Long length) { - float m = length / 1024f / 1024f; - String str = Float.toString(m); - int index = str.lastIndexOf("."); - if (index != -1 && str.length() > index + 3) { - str = str.substring(0, index + 3); - } - return str + "M"; - } - - private void saveCurrentSetting() { - Editor mEditor = sp.edit(); - mEditor.putBoolean("autoinstall", setting_sb_autoinstall.isChecked()); - mEditor.putBoolean("autodelete", setting_sb_autodelete.isChecked()); - mEditor.putBoolean("deletedata", setting_sb_deletedata.isChecked()); - mEditor.putBoolean("autoupdate", setting_sb_autoupdate.isChecked()); - mEditor.apply(); - } - - @Override - public void onClick(final View v) { - switch (v.getId()) { - case R.id.actionbar_rl_back: - finish(); - break; - case R.id.setting_rl_autoinstall: - setting_sb_autoinstall.performClick(); - break; - case R.id.setting_rl_autodelete: - setting_sb_autodelete.performClick(); - break; - case R.id.setting_rl_deletedata: - setting_sb_deletedata.performClick(); - break; - case R.id.setting_rl_autoupdate: - setting_sb_autoupdate.performClick(); - break; - case R.id.setting_rl_update: - dialog = DialogUtils.showWaitDialog(this, "检查更新中..."); - if (isChecking) - break; - isChecking = true; - checkUpdate(); - break; - case R.id.setting_rl_cache: - dialog = DialogUtils.showWaitDialog(this, "清除缓存中..."); - claerCache(); - break; - case R.id.setting_rl_feedback: - startActivity(new Intent(SettingActivity.this, - SuggestionActivity.class)); - break; - case R.id.setting_tv_disclaimer: - String content = sp.getString("disclaimer", null); - if (!TextUtils.isEmpty(content)) { - showDisclaimerDialog(content); - } - break; - default: - break; - } - } - - // 清除缓存 - private void claerCache() { - new Thread() { - @Override - public void run() { - long start = System.currentTimeMillis(); - deleteFolder(getCacheDir()); - deleteFolder(getExternalCacheDir()); - long time = System.currentTimeMillis() - start; - if (time < 1000) { - try { - sleep(1000 - time); - } catch (InterruptedException e) { - - e.printStackTrace(); - } - } - if (dialog != null) { - dialog.dismiss(); - } - handler.post(new Runnable() { - @Override - public void run() { - setting_tv_cache.setText(getCacheSize()); - } - }); - } - }.start(); - } - - private void deleteFolder(File folder) { - if (folder != null) { - if (folder.isDirectory()) { - for (File file : folder.listFiles()) { - if (file.isDirectory()) { - deleteFolder(file); - } else { - file.delete(); - } - } - } - folder.delete(); - } - } - - // 弹出免责声明的窗口 - private void showDisclaimerDialog(String content) { - final Dialog disclaimerDialog = new Dialog(this); - View view = View - .inflate(this, R.layout.setting_disclaimer_dialog, null); - TextView title = (TextView) view - .findViewById(R.id.disclaimer_dialog_title); - title.setText("免责声明"); - TextView message = (TextView) view - .findViewById(R.id.disclaimer_dialog_message); - Spanned spanned = Html.fromHtml(content); - message.setText(spanned); - view.findViewById(R.id.disclaimer_dialog_confirm).setOnClickListener( - new OnClickListener() { - @Override - public void onClick(View v) { - disclaimerDialog.dismiss(); - } - }); - disclaimerDialog.requestWindowFeature(Window.FEATURE_NO_TITLE); - disclaimerDialog.setContentView(view); - disclaimerDialog.show(); - } - - private void checkUpdate() { - String TD_CHANNEL_ID = (String) PackageUtils.getMetaData(this, - getPackageName(), "TD_CHANNEL_ID"); - String url = Config.HOST + "v2/version?version_name=" - + PackageUtils.getVersion(getApplicationContext()) - + "&channel=" + TD_CHANNEL_ID; - JsonObjectExtendedRequest request = new JsonObjectExtendedRequest(url, - new Response.Listener() { - @Override - public void onResponse(JSONObject response) { - - isChecking = false; - if (dialog != null) { - dialog.dismiss(); - } - - if (response.length() == 0) { - toast("已是最新版本"); - } else { - Gson gson = new Gson(); - appEntity = gson.fromJson(response.toString(), - AppEntity.class); - - float version = Float.valueOf(appEntity - .getVersion()); - float currentVersion = Float.valueOf(PackageUtils - .getVersion(getApplicationContext())); - - if (version > currentVersion) { - // 光环助手 有更新 - GameUpdateEntity game = new GameUpdateEntity(); - game.setName("光环助手V" + appEntity.getVersion()); - game.setPackageName(getPackageName()); - game.setSize(appEntity.getSize()); - game.setVersion(appEntity.getVersion()); - game.setUrl(appEntity.getUrl()); - game.setPlatform("官方版"); - PackageManager.addUpdate(0, game); - - String updateMD5 = MD5Utils.getUpdateMD5( - appEntity.getUrl(), - appEntity.getContent()); - - showUpdateDialog(updateMD5); - } else { - showCancelDialog(); - } - - } - - } - }, new Response.ErrorListener() { - - @Override - public void onErrorResponse(VolleyError error) { - isChecking = false; - if (dialog != null) { - dialog.dismiss(); - } - - Utils.log("error = " + error.toString()); - - toast("检查更新失败"); - } - }); - AppController.addToRequestQueue(request, SettingActivity.class); - } - - private void showUpdateDialog(final String md5) { - dialog = new Dialog(this); - View view = View.inflate(this, R.layout.search_history_delete_dialog, - null); - TextView title = (TextView) view.findViewById(R.id.delete_dialog_title); - title.setText("更新"); - TextView content = (TextView) view - .findViewById(R.id.delete_dialog_message); - - Spanned dialogContent = Html - .fromHtml("

发现新版本!

" - + "更新不会影响用户信息!
" - + "最新版本:V" - + appEntity.getVersion() - + "
" - + "更新包大小:" - + appEntity.getSize() - + "
" - + "更新内容:
" - + appEntity.getContent() + "
" - + "
确定更新吗?"); - - content.setText(dialogContent); - - if (appEntity.isIs_force()) { - dialog.setCanceledOnTouchOutside(false); - dialog.setCancelable(false); - } - view.findViewById(R.id.delete_dialog_cancel).setOnClickListener( - new OnClickListener() { - @Override - public void onClick(View v) { - if (appEntity.isIs_force()) { - Intent data = new Intent(); - data.putExtra("isForce", true); - setResult(RESULT_OK, data); - finish(); - } else { - if (dialog != null) { - dialog.dismiss(); - } - } - } - }); - view.findViewById(R.id.delete_dialog_confirm).setOnClickListener( - new OnClickListener() { - @Override - public void onClick(View v) { - if (dialog != null) { - dialog.dismiss(); - } - String path = FileUtils.getDownloadPath( - SettingActivity.this, - "光环助手V" + appEntity.getVersion() + "_" + md5 - + ".apk"); - File file = new File(path); - if (file.exists() && file.length() > 0) { - startActivity(PackageUtils.getInstallIntent(path)); - } else { - DataUtils.onEvent(SettingActivity.this, "软件更新", "下载开始"); - showDownloadDialog(md5); - } - } - }); - dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); - dialog.setContentView(view); - dialog.show(); - } - - private void showDownloadDialog(String md5) { - dialog = new Dialog(SettingActivity.this); - dialog.setCanceledOnTouchOutside(false); - dialog.setCancelable(false); - dialog.closeOptionsMenu(); - View view = View.inflate(this, R.layout.app_updating_dialog, null); - - app_pb_progress = (ProgressBar) view.findViewById(R.id.app_pb_progress); - app_tv_speed = (TextView) view.findViewById(R.id.app_tv_speed); - app_tv_percent = (TextView) view.findViewById(R.id.app_tv_percent); - app_btn_cancel = (TextView) view.findViewById(R.id.app_btn_cancel); - - app_btn_cancel.setOnClickListener(new OnClickListener() { - @Override - public void onClick(View v) { - DownloadManager.getInstance(getApplicationContext()).cancel( - appEntity.getUrl()); - if (appEntity.isIs_force()) { - Intent data = new Intent(); - data.putExtra("isForce", true); - setResult(RESULT_OK, data); - finish(); - } else { - if (dialog != null) { - dialog.dismiss(); - } - isShowDownload = false; - } - } - }); - - dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); - dialog.setContentView(view); - dialog.show(); - - isShowDownload = true; - - String path = FileUtils.getDownloadPath(SettingActivity.this, "光环助手V" - + appEntity.getVersion() + "_" + md5 + ".apk"); - - File file = new File(path); - - if (file.exists()) { - file.delete(); - } - - DownloadEntry downloadEntry = new DownloadEntry(); - downloadEntry.setUrl(appEntity.getUrl()); - downloadEntry.setName("光环助手V" + appEntity.getVersion()); - downloadEntry.setPath(path); - HashMap meta = new HashMap(); - meta.put("platform", "官方版"); - downloadEntry.setMeta(meta); - - DownloadManager.getInstance(getApplicationContext()).cancel( - downloadEntry.getUrl(), false); - - DownloadManager.getInstance(getApplicationContext()).pauseAll(); - - DownloadManager.getInstance(getApplicationContext()).add(downloadEntry); - } - - private void showCancelDialog() { - - final Dialog dialog = new Dialog(SettingActivity.this); - View view = View.inflate(SettingActivity.this, - R.layout.search_history_delete_dialog, null); - TextView title = (TextView) view.findViewById(R.id.delete_dialog_title); - title.setText("更新提示"); - TextView content = (TextView) view - .findViewById(R.id.delete_dialog_message); - - content.setText("已经是最新版本!"); - - view.findViewById(R.id.delete_dialog_rl_cancel) - .setVisibility(View.GONE); - view.findViewById(R.id.delete_dialog_rl_confirm).setVisibility( - View.VISIBLE); - - TextView cancel = (TextView) view - .findViewById(R.id.delete_dialog_confirm); - - cancel.setVisibility(View.VISIBLE); - cancel.setOnClickListener(new OnClickListener() { - @Override - public void onClick(View v) { - dialog.dismiss(); - } - }); - - dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); - dialog.setContentView(view); - dialog.show(); - } - - @Override - public void onResume() { - super.onResume(); - DownloadManager.getInstance(SettingActivity.this).addObserver( - dataWatcher); - } - - @Override - public void onPause() { - saveCurrentSetting(); - super.onPause(); - DownloadManager.getInstance(SettingActivity.this).removeObserver( - dataWatcher); - } - - @Override - protected void onDestroy() { - saveCurrentSetting(); - super.onDestroy(); - setting_sb_autoinstall = null; - setting_sb_autodelete = null; - setting_sb_deletedata = null; - setting_sb_autoupdate = null; - setting_tv_version = null; - app_tv_speed = null; - app_tv_percent = null; - app_btn_cancel = null; - setting_tv_cache = null; - app_pb_progress = null; - sp = null; - dialog = null; - appEntity = null; - handler = null; - dataWatcher = null; - } + private SwitchButton setting_sb_autoinstall, setting_sb_autodelete, + setting_sb_deletedata, setting_sb_autoupdate; + private TextView setting_tv_version, app_tv_speed, app_tv_percent, + app_btn_cancel, setting_tv_cache; + private ProgressBar app_pb_progress; + + private SharedPreferences sp; + + private Dialog dialog = null; + + private AppEntity appEntity; + + private boolean isChecking = false; + private boolean isShowDownload = false; + + private Handler handler = new Handler(); + + private DataWatcher dataWatcher = new DataWatcher() { + + @Override + public void onDataChanged(HashMap downloads) { + for (Entry entry : downloads.entrySet()) { + DownloadEntry downloadEntry = entry.getValue(); + if (downloadEntry.getName().contains("光环助手") && isShowDownload) { + app_tv_speed.setText(SpeedUtils.getSpeed(downloadEntry + .getSpeed()) + + "(剩" + + SpeedUtils.getRemainTime(downloadEntry.getSize(), + downloadEntry.getProgress(), + downloadEntry.getSpeed() * 1024) + ")"); + app_pb_progress.setProgress((int) (downloadEntry + .getPercent() * 10)); + app_tv_percent.setText(downloadEntry.getPercent() + "%"); + if (DownloadStatus.done.equals(downloadEntry.getStatus())) { + DownloadManager.getInstance(getApplicationContext()) + .cancel(downloadEntry.getUrl(), false); + if (appEntity != null && appEntity.isIs_force()) { + AppController.getInstance().finishActivity(); + } else { + if (dialog != null) { + dialog.dismiss(); + } + isShowDownload = false; + } + } + } + } + } + + }; + + @Override + public void finish() { + saveCurrentSetting(); + super.finish(); + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + View contentView = View.inflate(this, R.layout.activity_setting, null); + + init(contentView, "设置"); + + findViewById(R.id.setting_rl_autoinstall).setOnClickListener(this); + findViewById(R.id.setting_rl_autodelete).setOnClickListener(this); + findViewById(R.id.setting_rl_deletedata).setOnClickListener(this); + findViewById(R.id.setting_rl_autoupdate).setOnClickListener(this); + findViewById(R.id.setting_rl_update).setOnClickListener(this); + findViewById(R.id.setting_rl_feedback).setOnClickListener(this); + findViewById(R.id.setting_rl_cache).setOnClickListener(this); + findViewById(R.id.setting_rl_font_size).setOnClickListener(this); + + if (AppController.get("user", false) != null) { + findViewById(R.id.setting_tv_account).setOnClickListener(this); + } else { + findViewById(R.id.setting_tv_account).setVisibility(View.GONE); + } + + setting_tv_version.setText("当前版本:V" + + PackageUtils.getVersion(getApplicationContext())); + + setting_tv_cache.setText(getCacheSize()); + + sp = getSharedPreferences(Config.PREFERENCE, Activity.MODE_PRIVATE); + + setting_sb_autoinstall.setChecked(sp.getBoolean("autoinstall", true)); + setting_sb_autodelete.setChecked(sp.getBoolean("autodelete", true)); + setting_sb_deletedata.setChecked(sp.getBoolean("deletedata", true)); + setting_sb_autoupdate.setChecked(sp.getBoolean("autoupdate", true)); + + if (sp.getBoolean("isShowDisclaimer", false)) { + TextView setting_tv_disclaimer = (TextView) findViewById(R.id.setting_tv_disclaimer); + setting_tv_disclaimer.setVisibility(View.VISIBLE); + setting_tv_disclaimer.setOnClickListener(this); + } + } + + // 获取缓存大小 + private String getCacheSize() { + File ecDir = getExternalCacheDir(); + long cacheLength = getFolderSize(getCacheDir()); + if (ecDir != null) { + cacheLength += getFolderSize(ecDir); + } + return long2Size(cacheLength); + } + + private long getFolderSize(File folder) { + long size = 0; + size += folder.length(); + if (folder.isDirectory()) { + for (File file : folder.listFiles()) { + if (file.isDirectory()) { + size += getFolderSize(file); + } else { + size += file.length(); + } + } + } + return size; + } + + private String long2Size(Long length) { + float m = length / 1024f / 1024f; + String str = Float.toString(m); + int index = str.lastIndexOf("."); + if (index != -1 && str.length() > index + 3) { + str = str.substring(0, index + 3); + } + return str + "M"; + } + + private void saveCurrentSetting() { + Editor mEditor = sp.edit(); + mEditor.putBoolean("autoinstall", setting_sb_autoinstall.isChecked()); + mEditor.putBoolean("autodelete", setting_sb_autodelete.isChecked()); + mEditor.putBoolean("deletedata", setting_sb_deletedata.isChecked()); + mEditor.putBoolean("autoupdate", setting_sb_autoupdate.isChecked()); + mEditor.apply(); + } + + @Override + public void onClick(final View v) { + switch (v.getId()) { + case R.id.actionbar_rl_back: + finish(); + break; + case R.id.setting_rl_autoinstall: + setting_sb_autoinstall.performClick(); + break; + case R.id.setting_rl_autodelete: + setting_sb_autodelete.performClick(); + break; + case R.id.setting_rl_deletedata: + setting_sb_deletedata.performClick(); + break; + case R.id.setting_rl_autoupdate: + setting_sb_autoupdate.performClick(); + break; + case R.id.setting_rl_update: + dialog = DialogUtils.showWaitDialog(this, "检查更新中..."); + if (isChecking) + break; + isChecking = true; + checkUpdate(); + break; + case R.id.setting_rl_cache: + dialog = DialogUtils.showWaitDialog(this, "清除缓存中..."); + claerCache(); + break; + case R.id.setting_rl_feedback: + startActivity(new Intent(SettingActivity.this, + SuggestionActivity.class)); + break; + case R.id.setting_tv_disclaimer: + String content = sp.getString("disclaimer", null); + if (!TextUtils.isEmpty(content)) { + showDisclaimerDialog(content); + } + break; + case R.id.setting_rl_font_size: + final Dialog dialog = new Dialog(this); + View inflate = LayoutInflater.from(this).inflate(R.layout.dialog_font_size, null); + TextView tv_negative = (TextView) inflate.findViewById(R.id.font_size_negative); + TextView tv_positive = (TextView) inflate.findViewById(R.id.font_size_positive); + final RadioGroup radioGroup = (RadioGroup) inflate.findViewById(R.id.font_size_radiogroup); + tv_negative.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + dialog.cancel(); + } + }); + tv_positive.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + int checkedRadioButtonId = radioGroup.getCheckedRadioButtonId(); + int index = checkedRadioButtonId % 4; + if (index == 0) { + index = 4; + } + Toast.makeText(getApplicationContext(), "" +index, Toast.LENGTH_SHORT).show(); + dialog.cancel(); + } + }); + dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); + dialog.setContentView(inflate); + dialog.show(); + + break; + default: + break; + } + } + + // 清除缓存 + private void claerCache() { + new Thread() { + @Override + public void run() { + long start = System.currentTimeMillis(); + deleteFolder(getCacheDir()); + deleteFolder(getExternalCacheDir()); + long time = System.currentTimeMillis() - start; + if (time < 1000) { + try { + sleep(1000 - time); + } catch (InterruptedException e) { + + e.printStackTrace(); + } + } + if (dialog != null) { + dialog.dismiss(); + } + handler.post(new Runnable() { + @Override + public void run() { + setting_tv_cache.setText(getCacheSize()); + } + }); + } + }.start(); + } + + private void deleteFolder(File folder) { + if (folder != null) { + if (folder.isDirectory()) { + for (File file : folder.listFiles()) { + if (file.isDirectory()) { + deleteFolder(file); + } else { + file.delete(); + } + } + } + folder.delete(); + } + } + + // 弹出免责声明的窗口 + private void showDisclaimerDialog(String content) { + final Dialog disclaimerDialog = new Dialog(this); + View view = View + .inflate(this, R.layout.setting_disclaimer_dialog, null); + TextView title = (TextView) view + .findViewById(R.id.disclaimer_dialog_title); + title.setText("免责声明"); + TextView message = (TextView) view + .findViewById(R.id.disclaimer_dialog_message); + Spanned spanned = Html.fromHtml(content); + message.setText(spanned); + view.findViewById(R.id.disclaimer_dialog_confirm).setOnClickListener( + new OnClickListener() { + @Override + public void onClick(View v) { + disclaimerDialog.dismiss(); + } + }); + disclaimerDialog.requestWindowFeature(Window.FEATURE_NO_TITLE); + disclaimerDialog.setContentView(view); + disclaimerDialog.show(); + } + + private void checkUpdate() { + String TD_CHANNEL_ID = (String) PackageUtils.getMetaData(this, + getPackageName(), "TD_CHANNEL_ID"); + String url = Config.HOST + "v2/version?version_name=" + + PackageUtils.getVersion(getApplicationContext()) + + "&channel=" + TD_CHANNEL_ID; + JsonObjectExtendedRequest request = new JsonObjectExtendedRequest(url, + new Response.Listener() { + @Override + public void onResponse(JSONObject response) { + + isChecking = false; + if (dialog != null) { + dialog.dismiss(); + } + + if (response.length() == 0) { + toast("已是最新版本"); + } else { + Gson gson = new Gson(); + appEntity = gson.fromJson(response.toString(), + AppEntity.class); + + float version = Float.valueOf(appEntity + .getVersion()); + float currentVersion = Float.valueOf(PackageUtils + .getVersion(getApplicationContext())); + + if (version > currentVersion) { + // 光环助手 有更新 + GameUpdateEntity game = new GameUpdateEntity(); + game.setName("光环助手V" + appEntity.getVersion()); + game.setPackageName(getPackageName()); + game.setSize(appEntity.getSize()); + game.setVersion(appEntity.getVersion()); + game.setUrl(appEntity.getUrl()); + game.setPlatform("官方版"); + PackageManager.addUpdate(0, game); + + String updateMD5 = MD5Utils.getUpdateMD5( + appEntity.getUrl(), + appEntity.getContent()); + + showUpdateDialog(updateMD5); + } else { + showCancelDialog(); + } + + } + + } + }, new Response.ErrorListener() { + + @Override + public void onErrorResponse(VolleyError error) { + isChecking = false; + if (dialog != null) { + dialog.dismiss(); + } + + Utils.log("error = " + error.toString()); + + toast("检查更新失败"); + } + }); + AppController.addToRequestQueue(request, SettingActivity.class); + } + + private void showUpdateDialog(final String md5) { + dialog = new Dialog(this); + View view = View.inflate(this, R.layout.search_history_delete_dialog, + null); + TextView title = (TextView) view.findViewById(R.id.delete_dialog_title); + title.setText("更新"); + TextView content = (TextView) view + .findViewById(R.id.delete_dialog_message); + + Spanned dialogContent = Html + .fromHtml("

发现新版本!

" + + "更新不会影响用户信息!
" + + "最新版本:V" + + appEntity.getVersion() + + "
" + + "更新包大小:" + + appEntity.getSize() + + "
" + + "更新内容:
" + + appEntity.getContent() + "
" + + "
确定更新吗?"); + + content.setText(dialogContent); + + if (appEntity.isIs_force()) { + dialog.setCanceledOnTouchOutside(false); + dialog.setCancelable(false); + } + view.findViewById(R.id.delete_dialog_cancel).setOnClickListener( + new OnClickListener() { + @Override + public void onClick(View v) { + if (appEntity.isIs_force()) { + Intent data = new Intent(); + data.putExtra("isForce", true); + setResult(RESULT_OK, data); + finish(); + } else { + if (dialog != null) { + dialog.dismiss(); + } + } + } + }); + view.findViewById(R.id.delete_dialog_confirm).setOnClickListener( + new OnClickListener() { + @Override + public void onClick(View v) { + if (dialog != null) { + dialog.dismiss(); + } + String path = FileUtils.getDownloadPath( + SettingActivity.this, + "光环助手V" + appEntity.getVersion() + "_" + md5 + + ".apk"); + File file = new File(path); + if (file.exists() && file.length() > 0) { + startActivity(PackageUtils.getInstallIntent(path)); + } else { + DataUtils.onEvent(SettingActivity.this, "软件更新", "下载开始"); + showDownloadDialog(md5); + } + } + }); + dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); + dialog.setContentView(view); + dialog.show(); + } + + private void showDownloadDialog(String md5) { + dialog = new Dialog(SettingActivity.this); + dialog.setCanceledOnTouchOutside(false); + dialog.setCancelable(false); + dialog.closeOptionsMenu(); + View view = View.inflate(this, R.layout.app_updating_dialog, null); + + app_pb_progress = (ProgressBar) view.findViewById(R.id.app_pb_progress); + app_tv_speed = (TextView) view.findViewById(R.id.app_tv_speed); + app_tv_percent = (TextView) view.findViewById(R.id.app_tv_percent); + app_btn_cancel = (TextView) view.findViewById(R.id.app_btn_cancel); + + app_btn_cancel.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + DownloadManager.getInstance(getApplicationContext()).cancel( + appEntity.getUrl()); + if (appEntity.isIs_force()) { + Intent data = new Intent(); + data.putExtra("isForce", true); + setResult(RESULT_OK, data); + finish(); + } else { + if (dialog != null) { + dialog.dismiss(); + } + isShowDownload = false; + } + } + }); + + dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); + dialog.setContentView(view); + dialog.show(); + + isShowDownload = true; + + String path = FileUtils.getDownloadPath(SettingActivity.this, "光环助手V" + + appEntity.getVersion() + "_" + md5 + ".apk"); + + File file = new File(path); + + if (file.exists()) { + file.delete(); + } + + DownloadEntry downloadEntry = new DownloadEntry(); + downloadEntry.setUrl(appEntity.getUrl()); + downloadEntry.setName("光环助手V" + appEntity.getVersion()); + downloadEntry.setPath(path); + HashMap meta = new HashMap(); + meta.put("platform", "官方版"); + downloadEntry.setMeta(meta); + + DownloadManager.getInstance(getApplicationContext()).cancel( + downloadEntry.getUrl(), false); + + DownloadManager.getInstance(getApplicationContext()).pauseAll(); + + DownloadManager.getInstance(getApplicationContext()).add(downloadEntry); + } + + private void showCancelDialog() { + + final Dialog dialog = new Dialog(SettingActivity.this); + View view = View.inflate(SettingActivity.this, + R.layout.search_history_delete_dialog, null); + TextView title = (TextView) view.findViewById(R.id.delete_dialog_title); + title.setText("更新提示"); + TextView content = (TextView) view + .findViewById(R.id.delete_dialog_message); + + content.setText("已经是最新版本!"); + + view.findViewById(R.id.delete_dialog_rl_cancel) + .setVisibility(View.GONE); + view.findViewById(R.id.delete_dialog_rl_confirm).setVisibility( + View.VISIBLE); + + TextView cancel = (TextView) view + .findViewById(R.id.delete_dialog_confirm); + + cancel.setVisibility(View.VISIBLE); + cancel.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + dialog.dismiss(); + } + }); + + dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); + dialog.setContentView(view); + dialog.show(); + } + + @Override + public void onResume() { + super.onResume(); + DownloadManager.getInstance(SettingActivity.this).addObserver( + dataWatcher); + } + + @Override + public void onPause() { + saveCurrentSetting(); + super.onPause(); + DownloadManager.getInstance(SettingActivity.this).removeObserver( + dataWatcher); + } + + @Override + protected void onDestroy() { + saveCurrentSetting(); + super.onDestroy(); + setting_sb_autoinstall = null; + setting_sb_autodelete = null; + setting_sb_deletedata = null; + setting_sb_autoupdate = null; + setting_tv_version = null; + app_tv_speed = null; + app_tv_percent = null; + app_btn_cancel = null; + setting_tv_cache = null; + app_pb_progress = null; + sp = null; + dialog = null; + appEntity = null; + handler = null; + dataWatcher = null; + } } diff --git a/app/src/main/res/drawable/reuse_radiobutton_item_style.xml b/app/src/main/res/drawable/reuse_radiobutton_item_style.xml new file mode 100644 index 0000000000..b442d76dc6 --- /dev/null +++ b/app/src/main/res/drawable/reuse_radiobutton_item_style.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_setting.xml b/app/src/main/res/layout/activity_setting.xml index 57e887c620..6d0c5f4bcd 100644 --- a/app/src/main/res/layout/activity_setting.xml +++ b/app/src/main/res/layout/activity_setting.xml @@ -3,221 +3,257 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/bg_color" - android:orientation="vertical" > + android:orientation="vertical"> - - + android:layout_height="match_parent"> - + - + - + - - + - + - + + - - + - + - + + - - + - + - + + - - + - + - + + - - + - + - + + - - + - + - + + - - + - + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_font_size.xml b/app/src/main/res/layout/dialog_font_size.xml new file mode 100644 index 0000000000..9407b4fff2 --- /dev/null +++ b/app/src/main/res/layout/dialog_font_size.xml @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file