Automation/app/src/main/java/com/jens/automation2/ActivityManageTriggerNfc.java

306 lines
8.4 KiB
Java

package com.jens.automation2;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.PendingIntent;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.content.DialogInterface.OnCancelListener;
import android.content.Intent;
import android.content.IntentFilter;
import android.nfc.NfcAdapter;
import android.nfc.Tag;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import com.jens.automation2.receivers.NfcReceiver;
@SuppressLint("NewApi")
public class ActivityManageTriggerNfc extends Activity
{
public static String generatedId = null;
private static Tag discoveredTag = null;
EditText etNewNfcIdValue;
Button bReadNfcTag, bUseValueCurrentlyStored, bWriteNfcTag;
TextView tvCurrentNfcId;
private static int currentStatus = 0;
private static ProgressDialog progressDialog = null;
// Check if NFC is activated
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_manage_trigger_nfc);
etNewNfcIdValue = (EditText)findViewById(R.id.etNewNfcIdValue);
bReadNfcTag = (Button)findViewById(R.id.bReadNfcTag);
bUseValueCurrentlyStored = (Button)findViewById(R.id.bUseValueCurrentlyStored);
bWriteNfcTag = (Button)findViewById(R.id.bWriteNfcTag);
tvCurrentNfcId = (TextView)findViewById(R.id.tvCurrentNfcId);
bReadNfcTag.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
if(discoveredTag != null)
{
generatedId = NfcReceiver.readTag(discoveredTag);
tvCurrentNfcId.setText(generatedId);
}
else
{
progressDialog = ProgressDialog.show(ActivityManageTriggerNfc.this, null, getResources().getString(R.string.nfcBringTagIntoRange), false, true, new OnCancelListener()
{
@Override
public void onCancel(DialogInterface dialog)
{
progressDialog.dismiss();
progressDialog = null;
currentStatus = 0;
}
});
}
}
});
bUseValueCurrentlyStored.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
if(discoveredTag != null)
{
if(checkEnteredText(false))
{
setResult(RESULT_OK);
finish();
}
}
else
{
progressDialog = ProgressDialog.show(ActivityManageTriggerNfc.this, null, getResources().getString(R.string.nfcBringTagIntoRange), false, true, new OnCancelListener()
{
@Override
public void onCancel(DialogInterface dialog)
{
progressDialog.dismiss();
progressDialog = null;
currentStatus = 0;
}
});
currentStatus = 1;
}
}
});
bWriteNfcTag.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
if(checkEnteredText(true))
{
// ActivityPermissions.requestSpecificPermission("android.permission.NFC");
if(discoveredTag != null)
{
tryWrite();
}
else
{
progressDialog = ProgressDialog.show(ActivityManageTriggerNfc.this, null, getResources().getString(R.string.nfcBringTagIntoRange), false, true, new OnCancelListener()
{
@Override
public void onCancel(DialogInterface dialog)
{
progressDialog.dismiss();
progressDialog = null;
currentStatus = 0;
}
});
currentStatus = 2;
// Toast.makeText(ActivityManageNfc.this, "No tag.", Toast.LENGTH_LONG).show();
// Miscellaneous.logEvent("w", "NFC", "No tag.", 2);
}
}
}
});
if(generatedId != null)
etNewNfcIdValue.setText(generatedId);
}
public static void enableForegroundDispatch(final Activity activity)
{
NfcAdapter nfcAdapter = NfcReceiver.getNfcAdapter(activity);
final Intent intent = new Intent(activity.getApplicationContext(), activity.getClass());
intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
final PendingIntent pendingIntent = PendingIntent.getActivity(activity.getApplicationContext(), 0, intent, 0);
IntentFilter[] filters = new IntentFilter[1];
String[][] techList = new String[][]{};
// Notice that this is the same filter as in our manifest.
filters[0] = new IntentFilter();
filters[0].addAction(NfcAdapter.ACTION_NDEF_DISCOVERED);
filters[0].addAction(NfcAdapter.ACTION_TAG_DISCOVERED);
filters[0].addAction(NfcAdapter.ACTION_TECH_DISCOVERED);
filters[0].addCategory(Intent.CATEGORY_DEFAULT);
// try
// {
// filters[0].addDataType(NfcReceiver.MIME_TEXT_PLAIN);
// }
// catch (MalformedMimeTypeException e)
// {
// throw new RuntimeException("Check your mime type.");
// }
nfcAdapter.enableForegroundDispatch(activity, pendingIntent, filters, techList);
Miscellaneous.logEvent("i", "NFC", "Enabled foreground dispatch.", 5);
}
public static void disableForegroundDispatch(final Activity activity)
{
NfcAdapter nfcAdapter = NfcReceiver.getNfcAdapter(activity);
nfcAdapter.disableForegroundDispatch(activity);
Miscellaneous.logEvent("i", "NFC", "Disabled foreground dispatch.", 5);
}
@Override
protected void onPause()
{
/**
* Call this before onPause, otherwise an IllegalArgumentException is thrown as well.
*/
disableForegroundDispatch(this);
super.onPause();
}
@Override
protected void onResume()
{
super.onResume();
/**
* It's important, that the activity is in the foreground (resumed). Otherwise
* an IllegalStateException is thrown.
*/
enableForegroundDispatch(this);
// NfcReceiver.checkIntentForNFC(this, new Intent(this.getApplicationContext(), this.getClass()));
}
@Override
protected void onNewIntent(Intent intent)
{
Miscellaneous.logEvent("i", "NFC", "ActivityManageNfc->onNewIntent().", 5);
Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
if(tag == null)
{
tvCurrentNfcId.setText(getResources().getString(R.string.nfcNoTag));
}
else
{
Miscellaneous.logEvent("i", "NFC", getResources().getString(R.string.nfcTagDiscovered), 4);
Toast.makeText(this, getResources().getString(R.string.nfcTagDiscovered), Toast.LENGTH_LONG).show();
discoveredTag = tag;
if(progressDialog != null)
{
progressDialog.dismiss();
progressDialog = null;
}
if(currentStatus == 0)
{
generatedId = NfcReceiver.readTag(discoveredTag);
if(generatedId != null && generatedId.length() > 0)
tvCurrentNfcId.setText(generatedId);
else
tvCurrentNfcId.setText(getResources().getString(R.string.nfcTagDataNotUsable));
}
else if(currentStatus == 1)
{
tryRead();
}
else if(currentStatus == 2)
if(checkEnteredText(true))
tryWrite();
}
// NfcReceiver.checkIntentForNFC(this, intent);
}
private boolean checkEnteredText(boolean checkGuiValue)
{
if(checkGuiValue)
generatedId = etNewNfcIdValue.getText().toString();
if(generatedId.length() == 0)
{
generatedId = null;
Toast.makeText(ActivityManageTriggerNfc.this, getResources().getString(R.string.nfcEnterValidIdentifier), Toast.LENGTH_LONG).show();
return false;
}
else
return true;
}
private void tryWrite()
{
if(NfcReceiver.writeTag(generatedId, discoveredTag))
{
currentStatus = 0;
Toast.makeText(ActivityManageTriggerNfc.this, getResources().getString(R.string.nfcTagWrittenSuccessfully), Toast.LENGTH_LONG).show();
setResult(RESULT_OK);
finish();
}
else
{
currentStatus = 0;
Toast.makeText(ActivityManageTriggerNfc.this, getResources().getString(R.string.nfcTagWriteError), Toast.LENGTH_LONG).show();
Miscellaneous.logEvent("e", "NFC", getResources().getString(R.string.nfcTagWriteError), 2);
}
}
private void tryRead()
{
generatedId = NfcReceiver.readTag(discoveredTag);
if(checkEnteredText(false))
{
currentStatus = 0;
Toast.makeText(ActivityManageTriggerNfc.this, getResources().getString(R.string.nfcTagReadSuccessfully), Toast.LENGTH_LONG).show();
setResult(RESULT_OK);
finish();
}
else
{
currentStatus = 0;
Toast.makeText(ActivityManageTriggerNfc.this, getResources().getString(R.string.nfcValueNotSuitable), Toast.LENGTH_LONG).show();
generatedId = null;
}
}
@Override
protected void onDestroy()
{
super.onDestroy();
discoveredTag = null;
}
}