import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.INotificationSideChannel;
+import android.view.View;
/**
* SOS拨号策略:
public class MainActivity extends AppCompatActivity {
private SOSPresenter sosPresenter;
+ private View callingPage;
+ private View errorPage;
+ private View initPage;
+ private View noSimPage;
+ private View noNumberPage;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
- //sosPresenter = new SOSPresenter(this);
+ sosPresenter = new SOSPresenter(this);
//监听状态变化
- //initObserver();
+ initObserver();
}
- private void initView() {
+ private void hideAll() {
+ callingPage.setVisibility(View.GONE);
+ errorPage.setVisibility(View.GONE);
+ initPage.setVisibility(View.GONE);
+ noSimPage.setVisibility(View.GONE);
+ noNumberPage.setVisibility(View.GONE);
+ }
+ private void initView() {
+ //找到各个页面
+ callingPage = findViewById(R.id.calling_page);
+ errorPage = findViewById(R.id.error_page);
+ initPage = findViewById(R.id.init_page);
+ noSimPage = findViewById(R.id.no_sim_page);
+ noNumberPage = findViewById(R.id.no_number_page);
}
@Override
protected void onResume() {
super.onResume();
//当UI重新可见的时候,检查是否需要进行下一个拨号
- //TODO:
+ //判断是否有完成第一次拨号,如果有的话就检查是否进行下一次拨号
+ if (sosPresenter.hasFirstCall()) {
+ //检查下一个拨号
+ sosPresenter.checkNextCall();
+ }
}
@Override
private void initObserver() {
sosPresenter.stateValue.observe(this, sosState -> {
+ hideAll();
//状态变化,改变UI
- //TODO:
+ switch (sosState) {
+ case NONE:
+ initPage.setVisibility(View.VISIBLE);
+ break;
+ case NO_SIM:
+ noSimPage.setVisibility(View.VISIBLE);
+ break;
+ case CALLING:
+ callingPage.setVisibility(View.VISIBLE);
+ break;
+ case NO_SOS_NUM:
+ noNumberPage.setVisibility(View.VISIBLE);
+ break;
+ case CALL_FAILED:
+ errorPage.setVisibility(View.VISIBLE);
+ break;
+ case FINISH:
+ finish();
+ break;
+ }
});
}
switch (state) {
case STATE_END:
ICLogger.d("通话结束");
- checkNextCall();
+ //在activity onResume的时候再去检查
+ //checkNextCall();
break;
case STATE_HAND_UP_ING:
ICLogger.d("正在挂断");
/**
* 根据条件进行下一轮拨号
*/
- private void checkNextCall() {
+ public void checkNextCall() {
boolean doCallNext;
//是否进行下一个拨号,结合策略和是否有接听
handler.postDelayed(this::doSosCall, 10000);
} else {
ICLogger.d("结束界面...");
+ stateValue.postValue(SOSState.FINISH);
}
}
if (phoneNumList.size() > 0) {
//可以拨号
doSosCall();
+ hasFirstCall = true;
}
}
private int currentLoopGroupTime = 0;
+ private boolean hasFirstCall = false;
+
+ public boolean hasFirstCall() {
+ return hasFirstCall;
+ }
+
/**
* 根据策略去拨号
*/
public void cleared() {
+ hasFirstCall = false;
phoneNumList.clear();
mContext.unregisterReceiver(stateReceiver);
}