package com.jyc.threegames.activity.base; import android.app.Dialog; import android.app.ProgressDialog; import android.content.Intent; import android.graphics.Color; import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.view.MotionEvent; import android.view.View; import android.view.Window; import android.view.WindowManager; import android.widget.TextView; import android.widget.Toast; import androidx.annotation.LayoutRes; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.widget.Toolbar; import com.jyc.threegames.R; import com.jyc.threegames.activity.AlertActivity; import com.jyc.threegames.activity.LoginActivity; import com.jyc.threegames.controller.LoginController; import com.jyc.threegames.net.SimpleRequest; import com.jyc.threegames.utils.ToastUtil; import java.util.Timer; import java.util.TimerTask; import butterknife.BindView; import butterknife.ButterKnife; public abstract class BaseActivity extends AppCompatActivity { protected final int WATCH_LONG = 2 * 60 * 1000; @Nullable @BindView(R.id.toolbar) Toolbar mToolbar; @Nullable @BindView(R.id.title) TextView mTVTitle; private long mLastTimeClick = 0; protected boolean mNeedToWatch = false; private Timer mWatcher; private Handler mClickHandler = new Handler(new Handler.Callback() { @Override public boolean handleMessage(@NonNull Message message) { if (System.currentTimeMillis() - mLastTimeClick >= WATCH_LONG){ AlertActivity.LAUNCH(BaseActivity.this, getAlertText()); stopWatch(); } return true; } }); @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(getRootLayout()); ButterKnife.bind(this); initSystemBar(); if (mToolbar != null) { mToolbar.setTitle(""); setSupportActionBar(mToolbar); } if (mTVTitle != null) mTVTitle.setText(getPageTitle()); init(savedInstanceState); } @Override protected void onResume() { if (mNeedToWatch) startWatch(); super.onResume(); } @Override protected void onDestroy() { stopWatch(); super.onDestroy(); } @Override public boolean dispatchTouchEvent(MotionEvent ev) { if (ev.getAction() == MotionEvent.ACTION_DOWN) refreshLastTimeClick(); return super.dispatchTouchEvent(ev); } private void initSystemBar() { Window window = getWindow(); window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR); } protected void startWatch(){ mNeedToWatch = true; refreshLastTimeClick(); mWatcher = new Timer(); mWatcher.schedule(new TimerTask() { @Override public void run() { mClickHandler.sendEmptyMessage(0); } }, 0, 2 * 1000); } private void stopWatch(){ if (mWatcher != null){ mWatcher.cancel(); mWatcher = null; } } private void refreshLastTimeClick(){ mLastTimeClick = System.currentTimeMillis(); } protected abstract @LayoutRes int getRootLayout(); protected String getPageTitle(){ return ""; } protected String getAlertText(){ return ""; } protected void init(Bundle instance){} protected void doLogout(){ if (LoginController.getInstance().isCurrentUserAdmin()){ LoginController.getInstance().logout(); startActivity(new Intent(BaseActivity.this, LoginActivity.class)); finish(); return; } Dialog loading = new ProgressDialog(this); loading.setTitle("正在退出登录"); loading.show(); new SimpleRequest() .request(this, LoginController.getInstance().canLogout(), "退出登錄失敗!請檢查網絡狀態", loading, new SimpleRequest.Executor() { @Override public void execute(Boolean obj) { if (obj != null && obj){ LoginController.getInstance().logout(); startActivity(new Intent(BaseActivity.this, LoginActivity.class)); finish(); }else ToastUtil.showToast(BaseActivity.this, "測試週期已開始,不可登出"); } }); } }