RingActivity.java 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342
  1. package com.jyc.threegames.activity;
  2. import android.annotation.SuppressLint;
  3. import android.app.Dialog;
  4. import android.app.KeyguardManager;
  5. import android.app.ProgressDialog;
  6. import android.content.Context;
  7. import android.content.DialogInterface;
  8. import android.content.Intent;
  9. import android.content.res.AssetFileDescriptor;
  10. import android.media.AudioManager;
  11. import android.media.MediaPlayer;
  12. import android.media.Ringtone;
  13. import android.media.RingtoneManager;
  14. import android.net.Uri;
  15. import android.os.Build;
  16. import android.os.Bundle;
  17. import android.os.PowerManager;
  18. import android.text.TextUtils;
  19. import android.util.Log;
  20. import android.view.View;
  21. import android.view.WindowManager;
  22. import android.widget.RadioGroup;
  23. import android.widget.TextView;
  24. import android.widget.Toast;
  25. import androidx.annotation.NonNull;
  26. import androidx.appcompat.app.AlertDialog;
  27. import androidx.constraintlayout.widget.ConstraintLayout;
  28. import com.jyc.threegames.App;
  29. import com.jyc.threegames.R;
  30. import com.jyc.threegames.activity.base.BaseActivity;
  31. import com.jyc.threegames.bean.ControllerMessage;
  32. import com.jyc.threegames.bean.result.ResGameInfo;
  33. import com.jyc.threegames.controller.GameController;
  34. import com.jyc.threegames.controller.LoginController;
  35. import com.jyc.threegames.net.SimpleRequest;
  36. import com.jyc.threegames.utils.ToastUtil;
  37. import com.orhanobut.logger.Logger;
  38. import java.io.IOException;
  39. import java.text.SimpleDateFormat;
  40. import java.util.Calendar;
  41. import java.util.Locale;
  42. import java.util.Timer;
  43. import java.util.TimerTask;
  44. import butterknife.BindView;
  45. import butterknife.OnClick;
  46. import timber.log.Timber;
  47. public class RingActivity extends BaseActivity {
  48. private static final String PARAM_GAME_INFO = "info";
  49. @BindView(R.id.label)
  50. TextView mTVLabel;
  51. @BindView(R.id.hint)
  52. TextView mTVHint;
  53. @BindView(R.id.root_ring)
  54. ConstraintLayout mCLRootRing;
  55. @BindView(R.id.root_delay)
  56. ConstraintLayout mCLRootDelay;
  57. @BindView(R.id.root_over_time_scale)
  58. ConstraintLayout mCLOverTimeScale;
  59. @BindView(R.id.delay_group)
  60. RadioGroup mRGDelay;
  61. private ResGameInfo mGameInfo;
  62. private boolean mGoToGameOrScale = false;
  63. private int mCurrentVolume = 0;
  64. private Ringtone mRingTone;
  65. private boolean mFirstDelay = true;
  66. @Override
  67. protected void init(Bundle instance) {
  68. super.init(instance);
  69. Logger.i("enter RingActivity");
  70. App.CAN_PLAY_GAME = false;
  71. if (instance == null)
  72. mGameInfo = getIntent().getParcelableExtra(PARAM_GAME_INFO);
  73. else
  74. mGameInfo = instance.getParcelable(PARAM_GAME_INFO);
  75. if (mGameInfo == null){
  76. finish();
  77. return;
  78. }
  79. getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
  80. if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1)
  81. setTurnScreenOn(true);
  82. if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
  83. KeyguardManager keyguardManager = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE);
  84. keyguardManager.requestDismissKeyguard(this, null);
  85. }
  86. maxVolume();
  87. playRing();
  88. if (mGameInfo.playGameType == ResGameInfo.GAME_TYPE_SCALE && mGameInfo.delay >= 3){
  89. mCLRootRing.setVisibility(View.GONE);
  90. mCLOverTimeScale.setVisibility(View.VISIBLE);
  91. }else{
  92. mTVLabel.setText(getLabel());
  93. }
  94. Logger.i("RingActivity init");
  95. }
  96. @Override
  97. protected void onSaveInstanceState(@NonNull Bundle outState) {
  98. super.onSaveInstanceState(outState);
  99. outState.putParcelable(PARAM_GAME_INFO, mGameInfo);
  100. }
  101. @Override
  102. protected void onRestoreInstanceState(@NonNull Bundle savedInstanceState) {
  103. super.onRestoreInstanceState(savedInstanceState);
  104. mGameInfo = savedInstanceState.getParcelable(PARAM_GAME_INFO);
  105. }
  106. @Override
  107. protected int getRootLayout() {
  108. return R.layout.activity_ring;
  109. }
  110. @Override
  111. protected void onDestroy() {
  112. if (!mGoToGameOrScale)
  113. App.CAN_PLAY_GAME = true;
  114. stopPlay();
  115. restoreVolume();
  116. super.onDestroy();
  117. }
  118. @Override
  119. public void onBackPressed() {}
  120. @OnClick({R.id.now, R.id.do_it_now})
  121. public void clickNow(){
  122. Logger.i("enter game or scale");
  123. mGoToGameOrScale = true;
  124. if (mGameInfo.playGameType == ResGameInfo.GAME_TYPE_GAME){
  125. GameActivity.LAUNCH_GAME(this, mGameInfo);
  126. } else {
  127. ScaleActivity.LAUNCH(this, mGameInfo.playGameId, mGameInfo.date);
  128. }
  129. finish();
  130. }
  131. @OnClick({R.id.sure, R.id.do_it_later})
  132. public void clickSure(View view){
  133. int delay = -1;
  134. if (view.getId() == R.id.sure) {
  135. switch (mRGDelay.getCheckedRadioButtonId()) {
  136. case R.id.delay_5:
  137. delay = 5;
  138. break;
  139. case R.id.delay_10:
  140. delay = 10;
  141. break;
  142. case R.id.delay_15:
  143. delay = 15;
  144. break;
  145. case R.id.delay_20:
  146. delay = 20;
  147. break;
  148. case R.id.delay_25:
  149. delay = 25;
  150. break;
  151. case R.id.delay_30:
  152. delay = 30;
  153. break;
  154. }
  155. }else
  156. delay = 0;
  157. if (delay == -1){
  158. clickNow();
  159. }else{
  160. if (LoginController.getInstance().isCurrentUserAdmin()){
  161. ToastUtil.showToast(RingActivity.this, "延遲成功");
  162. finish();
  163. return;
  164. }
  165. Dialog loading = new ProgressDialog(RingActivity.this);
  166. loading.setTitle("正在延遲");
  167. loading.show();
  168. new SimpleRequest<>().requestMustDo(RingActivity.this,
  169. mGameInfo.playGameType == ResGameInfo.GAME_TYPE_GAME ?
  170. GameController.getInstance().delayGame(mGameInfo.playGameId, mGameInfo.gameConfigId, delay, !mFirstDelay) :
  171. GameController.getInstance().delayScale(mGameInfo.playGameId, delay),
  172. "延遲失敗!請檢查網絡連接狀態", loading, new SimpleRequest.Executor<ControllerMessage<Object>>() {
  173. @Override
  174. public void execute(ControllerMessage<Object> obj) {
  175. loading.dismiss();
  176. if (obj.isSuccess()){
  177. ToastUtil.showToast(RingActivity.this, "延遲成功");
  178. finish();
  179. }else if(!TextUtils.isEmpty(obj.getMessage()) && obj.getMessage().equals("1")){
  180. mFirstDelay = false;
  181. mCLRootDelay.setVisibility(View.GONE);
  182. mTVHint.setVisibility(View.VISIBLE);
  183. TimerTask timerTask = new TimerTask() {
  184. @Override
  185. public void run() {
  186. runOnUiThread(new Runnable() {
  187. @Override
  188. public void run() {
  189. mTVHint.setVisibility(View.GONE);
  190. mCLRootDelay.setVisibility(View.VISIBLE);
  191. }
  192. });
  193. }
  194. };
  195. Timer timer = new Timer();
  196. timer.schedule(timerTask, 5 * 1000);
  197. }
  198. }
  199. });
  200. }
  201. }
  202. @OnClick(R.id.push_back)
  203. public void clickPushBack(){
  204. Logger.i("choose delay");
  205. mCLRootRing.setVisibility(View.GONE);
  206. mCLRootDelay.setVisibility(View.VISIBLE);
  207. stopPlay();
  208. // String[] items = new String[]{"5分鐘", "10分鐘", "15分鐘", "20分鐘", "25分鐘", "30分鐘"};
  209. // new AlertDialog.Builder(this,0)
  210. // .setTitle("請選擇延遲時間")
  211. // .setItems(items, new DialogInterface.OnClickListener() {
  212. // @Override
  213. // public void onClick(DialogInterface dialogInterface, int i) {
  214. // dialogInterface.dismiss();
  215. //
  216. // if (LoginController.getInstance().isCurrentUserAdmin()){
  217. // ToastUtil.showToast(RingActivity.this, "延遲成功");
  218. // finish();
  219. // return;
  220. // }
  221. //
  222. // Dialog loading = new ProgressDialog(RingActivity.this);
  223. // loading.setTitle("正在延遲");
  224. // loading.show();
  225. // new SimpleRequest<>().requestMustDo(RingActivity.this,
  226. // mGameInfo.playGameType == ResGameInfo.GAME_TYPE_GAME ?
  227. // GameController.getInstance().delayGame(mGameInfo.playGameId, mGameInfo.gameConfigId, getDelayMin(i)) :
  228. // GameController.getInstance().delayScale(mGameInfo.playGameId, getDelayMin(i)),
  229. // "延遲失敗!請檢查網絡連接狀態", loading, new SimpleRequest.Executor<ControllerMessage<Object>>() {
  230. // @Override
  231. // public void execute(ControllerMessage<Object> obj) {
  232. // if (obj.isSuccess()){
  233. // ToastUtil.showToast(RingActivity.this, "延遲成功");
  234. // }else
  235. // ToastUtil.showToast(RingActivity.this, obj.getMessage());
  236. // finish();
  237. // }
  238. // });
  239. //
  240. // }
  241. // }).create().show();
  242. }
  243. // private int getDelayMin(int index){
  244. // switch (index){
  245. // case 1:
  246. // return 10;
  247. // case 2:
  248. // return 15;
  249. // case 3:
  250. // return 20;
  251. // case 4:
  252. // return 25;
  253. // case 5:
  254. // return 30;
  255. // case 0:
  256. // default:
  257. // return 5;
  258. // }
  259. // }
  260. private void playRing(){
  261. try {
  262. Uri notification = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM);
  263. mRingTone = RingtoneManager.getRingtone(this, notification);
  264. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P)
  265. mRingTone.setLooping(true);
  266. mRingTone.play();
  267. } catch (Exception e) {
  268. e.printStackTrace();
  269. Log.e("three_games", "播放鈴聲失敗");
  270. }
  271. }
  272. private void maxVolume(){
  273. mCurrentVolume = getAudioManager().getStreamVolume(AudioManager.STREAM_ALARM);
  274. getAudioManager().setStreamVolume(AudioManager.STREAM_ALARM, getAudioManager().getStreamMaxVolume(AudioManager.STREAM_ALARM), 0);
  275. }
  276. private void restoreVolume(){
  277. getAudioManager().setStreamVolume(AudioManager.STREAM_ALARM, mCurrentVolume, 0);
  278. }
  279. private AudioManager getAudioManager(){
  280. return (AudioManager) getSystemService(Context.AUDIO_SERVICE);
  281. }
  282. private void stopPlay(){
  283. if (mRingTone != null && mRingTone.isPlaying()){
  284. mRingTone.stop();
  285. }
  286. }
  287. private String getLabel(){
  288. return mGameInfo.playGameType == ResGameInfo.GAME_TYPE_GAME ? "您需要做測試啦" : "您需要做量表啦";
  289. }
  290. public static void LAUNCH(Context context, ResGameInfo gameInfo){
  291. Intent intent = new Intent(context, RingActivity.class);
  292. intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
  293. intent.putExtra(PARAM_GAME_INFO, gameInfo);
  294. context.startActivity(intent);
  295. }
  296. }