/* * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package my.home.lehome.activity; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.nfc.NfcAdapter; import android.nfc.Tag; import android.os.Bundle; import android.text.TextUtils; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.TextView; import android.widget.Toast; import com.skyfishjy.library.RippleBackground; import my.home.lehome.R; import my.home.lehome.mvp.presenters.NFCDetectPresenter; import my.home.lehome.mvp.views.NFCDetectView; public class NFCDetectDialog extends Activity implements NFCDetectView { public static final String EXTRA_TEXT_CONTENT = "EXTRA_TEXT_CONTENT"; public static final int RESULT_CODE_SUCCESS = 1; public static final int RESULT_CODE_FAIL = 2; public static final int RESULT_CODE_CANCEL = 3; private static final String TAG = "NFCDetectDialog"; private NFCDetectPresenter mNFCDetectPresenter; private State mState; private Button mCmdButton; private TextView mTitleTextview; private RippleBackground mRippleBackground; private String mTargetContent; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_nfcdetect); setFinishOnTouchOutside(false); setupData(); setupViews(null); if (TextUtils.isEmpty(mTargetContent)) { mTitleTextview.setText(R.string.nfc_empty_content); mCmdButton.setEnabled(true); mCmdButton.setText(R.string.nfc_close_dialog); mState = State.FAIL; } else { mNFCDetectPresenter.onActivityCreate(this); mNFCDetectPresenter.startDetecting(); } } private void setupData() { mNFCDetectPresenter = new NFCDetectPresenter(this); mTargetContent = getIntent().getStringExtra(NFCDetectDialog.EXTRA_TEXT_CONTENT); } @Override public void setupViews(View rootView) { mTitleTextview = (TextView) findViewById(R.id.nfc_detect_title); mCmdButton = (Button) findViewById(R.id.nfc_detect_button); mCmdButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Log.d(TAG, "click cancel on state " + mState); switch (mState) { case DETECTING: mNFCDetectPresenter.cancelDetecting(); case SUCCESS: case FAIL: finish(); break; default: break; } } }); mRippleBackground = (RippleBackground) findViewById(R.id.nfc_detect_rippleBackground); } @Override protected void onDestroy() { super.onDestroy(); mNFCDetectPresenter.onActivityDestory(this); } @Override protected void onResume() { super.onResume(); mNFCDetectPresenter.onActivityResume(this); } @Override protected void onPause() { super.onPause(); mNFCDetectPresenter.onActivityPause(this); } @Override public void finish() { switch (mState) { case DETECTING: setResult(RESULT_CODE_CANCEL); break; case SUCCESS: setResult(RESULT_CODE_SUCCESS); break; case FAIL: setResult(RESULT_CODE_FAIL); break; default: break; } super.finish(); } @Override public Context getContext() { return this; } @Override protected void onStart() { super.onStart(); this.mNFCDetectPresenter.start(); } @Override protected void onStop() { super.onStop(); this.mNFCDetectPresenter.stop(); } @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); if (NfcAdapter.ACTION_TECH_DISCOVERED.equals(intent.getAction())) { Tag detectedTag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG); mNFCDetectPresenter.onNewTagDetected(detectedTag); } } @Override public void onViewStateChange(State state) { mState = state; switch (state) { case DETECTING: mRippleBackground.startRippleAnimation(); mTitleTextview.setText(R.string.nfc_detecting_tag); break; case WRITING: mTitleTextview.setText(R.string.nfc_writing); mCmdButton.setEnabled(false); break; case SUCCESS: mRippleBackground.stopRippleAnimation(); mTitleTextview.setText(R.string.nfc_write_success); mCmdButton.setEnabled(true); mCmdButton.setText(R.string.nfc_close_dialog); break; case FAIL: mRippleBackground.stopRippleAnimation(); mTitleTextview.setText(R.string.nfc_write_fail); mCmdButton.setEnabled(true); mCmdButton.setText(R.string.nfc_close_dialog); break; case CANCEL: mRippleBackground.stopRippleAnimation(); finish(); break; default: break; } } @Override public void showStateToast(String content) { Toast.makeText(this, content, Toast.LENGTH_SHORT).show(); } @Override public String getTargetContent() { return mTargetContent; } }