/// <summary> /// This is called for activities that set launchMode to "singleTop" in their package, /// or if a client used the <see cref="Android.Content.ActivityFlags.SingleTop"/> flag when calling /// <see cref="Android.Content.ContextWrapper.StartActivity(Android.Content.Intent)"/>. /// </summary> /// <param name="intent">The new intent that was started for the activity.</param> protected override void OnNewIntent(Intent intent) { bool isBarcodeShouldBeDeleted = intent.GetBooleanExtra("delete", false); // if barcode should be deleted if (isBarcodeShouldBeDeleted) { // if clicked item index is correct if (_barcodeGeneratorFragment.ClickedItemIndex != -1) { // get adapter ArrayAdapter <Utils.BarcodeInformation> adapter = _barcodeGeneratorFragment.ListAdapter as ArrayAdapter <Utils.BarcodeInformation>; // remove barcode adapter.Remove(adapter.GetItem(_barcodeGeneratorFragment.ClickedItemIndex)); adapter.NotifyDataSetChanged(); } } else { // get barcode writer settings string xmlSerialization = intent.GetStringExtra("barcode"); if (xmlSerialization != null) { WriterSettings barcodeWriterSettings = Utils.DeserializeBarcodeWriterSettings(xmlSerialization); // get barcode description string barcodeDescription = intent.GetStringExtra("barcodeDescription"); // get barcode subset string barcodeSubset = intent.GetStringExtra("barcodeSubset"); string barcodeValue = intent.GetStringExtra("barcodeValue"); ArrayAdapter <Utils.BarcodeInformation> adapter = _barcodeGeneratorFragment.ListAdapter as ArrayAdapter <Utils.BarcodeInformation>; // if barcode writer settings is not empty if (barcodeWriterSettings != null) { // if clicked item index is correct if (_barcodeGeneratorFragment.ClickedItemIndex != -1) { // update list item Utils.BarcodeInformation item = adapter.GetItem(_barcodeGeneratorFragment.ClickedItemIndex); item.BarcodeWriterSetting = barcodeWriterSettings; item.BarcodeValue = barcodeValue; item.BarcodeDescription = barcodeDescription; item.BarcodeSubsetName = barcodeSubset; } else { // add value to the list adapter.Add(new Utils.BarcodeInformation(barcodeWriterSettings, barcodeValue, barcodeDescription, barcodeSubset)); } adapter.NotifyDataSetChanged(); } } } SaveHistory(); base.OnNewIntent(intent); }
/// <summary> /// Called to do initial creation of a fragment. /// </summary> /// <param name="savedInstanceState">If the fragment is being re-created from a previous saved state, /// this is the state.</param> protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); Utils.SetLocaleFromPrefereces(this); SetContentView(Resource.Layout.main); SupportActionBar.SetDisplayHomeAsUpEnabled(true); SupportActionBar.SetTitle(Resource.String.title_barcode_viewer); string xmlSerialization = Intent.GetStringExtra("barcode"); WriterSettings barcodeWriterSettings = Utils.DeserializeBarcodeWriterSettings(xmlSerialization); string barcodeDescription = Intent.GetStringExtra("barcodeDescription"); string barcodeSubset = Intent.GetStringExtra("barcodeSubset"); string barcodeValue = Intent.GetStringExtra("barcodeValue"); _barcode = new Utils.BarcodeInformation(barcodeWriterSettings, barcodeValue, barcodeDescription, barcodeSubset); _barcodeViewerFragment = new BarcodeViewerFragment(this); // create a new transaction Android.Support.V4.App.FragmentTransaction transaction = SupportFragmentManager.BeginTransaction(); // add fragment to the container transaction.Replace(Resource.Id.mainContentFrame, _barcodeViewerFragment); // commit the transaction transaction.Commit(); }
/// <summary> /// Called when an activity you launched exits, giving you the requestCode you started /// it with, the resultCode it returned, and any additional data from it. /// </summary> /// <param name="requestCode"> /// The integer request code originally supplied to <see cref="StartActivityForResult()"/>, allowing /// you to identify who this result came from. /// </param> /// <param name="resultCode">The integer result code returned by the child activity through its <see cref="SetResult()"/>.</param> /// <param name="data"> /// An Intent, which can return result data to the caller (various data can be attached to Intent "extras"). /// </param> protected override void OnActivityResult(int requestCode, [GeneratedEnum] Result resultCode, Intent data) { // if result is OK if (resultCode == Result.Ok) { // get barcode value string barcodeValue = data.GetStringExtra("SCAN_RESULT"); // get barcode type string string barcodeType = data.GetStringExtra("SCAN_RESULT_FORMAT"); // get adapter of list view ArrayAdapter <Utils.BarcodeInformation> adapter = _barcodeGeneratorFragment.ListAdapter as ArrayAdapter <Utils.BarcodeInformation>; // create new item Utils.BarcodeInformation newItem = new Utils.BarcodeInformation(); // get barcode type object barcodeTypeObject; bool isSupported = Utils.BarcodeTypeNameToBarcodeTypes.TryGetValue(barcodeType, out barcodeTypeObject); // if barcode type is supported if (isSupported) { // set barcode value newItem.BarcodeValue = barcodeValue; // if barcode type is subset if (barcodeTypeObject is BarcodeSymbologySubset) { // set subset name newItem.BarcodeSubsetName = barcodeType; ((BarcodeSymbologySubset)barcodeTypeObject).Encode(barcodeValue, newItem.BarcodeWriterSetting); } else { // set barcode type newItem.BarcodeWriterSetting.Barcode = (BarcodeType)barcodeTypeObject; newItem.BarcodeWriterSetting.Value = barcodeValue; } // add to the list adapter.Add(newItem); adapter.NotifyDataSetChanged(); Toast.MakeText(this, Resources.GetString(Resource.String.barcode_added_message), ToastLength.Short).Show(); _barcodeGeneratorFragment.SetLastItemIndexToClickedItemIndex(); SwitchToBarcodeViewer(this, newItem); } else { ShowInfoDialog( Resources.GetString(Resource.String.app_name), string.Format(Resources.GetString(Resource.String.barcode_type_unsupported_message), barcodeType)); } } base.OnActivityResult(requestCode, resultCode, data); }
/// <summary> /// This method will be called when an item in the list is selected. /// </summary> /// <param name="l">The ListView where the click happened.</param> /// <param name="v">The view that was clicked within the ListView.</param> /// <param name="position">The position of the view in the list.</param> /// <param name="id">The row id of the item that was clicked.</param> public override void OnListItemClick(ListView l, View v, int position, long id) { base.OnListItemClick(l, v, position, id); // save clicked position _clickedItemIndex = position; // get clicked item Utils.BarcodeInformation item = ((BarcodeArrayAdapter)ListAdapter).GetItem(position); _mainActivity.SwitchToBarcodeViewer(_mainActivity, item); }
/// <summary> /// Saves history. /// </summary> private void SaveHistory() { // adapter of list view ArrayAdapter <Utils.BarcodeInformation> adapter = _barcodeGeneratorFragment.ListAdapter as ArrayAdapter <Utils.BarcodeInformation>; if (adapter != null) { try { // open file stream to save history using (FileStream fileStream = new FileStream(_historyFilePath, FileMode.Create, FileAccess.Write)) { // open java object stream, which allows to seralize objects to a file using (Java.IO.ObjectOutputStream outStream = new Java.IO.ObjectOutputStream(fileStream)) { // temp list to get serialized items List <ArrayList> list = new List <ArrayList>(); // for each list item for (int index = 0; index < adapter.Count; index++) { // get item Utils.BarcodeInformation item = adapter.GetItem(index); // serialize writer settings string xmlBarcode = Utils.SerializeBarcodeWriterSettings(item.BarcodeWriterSetting); // create java list for four strings ArrayList serializedStruct = new ArrayList(); serializedStruct.Add(xmlBarcode); serializedStruct.Add(item.BarcodeDescription); serializedStruct.Add(item.BarcodeSubsetName); serializedStruct.Add(item.BarcodeValue); // add serialized object to the temp list list.Add(serializedStruct); } // create java list using (ArrayList arrayList = new ArrayList(list)) { // write java serializable objects to the file outStream.WriteObject(arrayList); } outStream.Close(); } fileStream.Close(); } } catch (Exception e) { Toast.MakeText(this, string.Format("Save history error: {0}", e.Message), ToastLength.Long).Show(); LogUnhandledException(e); } } }
/// <summary> /// Switches from current activity to the <see cref="BarcodeViewerActivity"/> instance. /// </summary> /// <param name="context">A context.</param> /// <param name="item">A barcode item.</param> internal void SwitchToBarcodeViewer(Context context, Utils.BarcodeInformation item) { Intent intent = new Intent(context, typeof(BarcodeViewerActivity)); // serialize data string xmlSerialization = Utils.SerializeBarcodeWriterSettings(item.BarcodeWriterSetting); intent.PutExtra("barcode", xmlSerialization); intent.PutExtra("barcodeDescription", item.BarcodeDescription); intent.PutExtra("barcodeSubset", item.BarcodeSubsetName); intent.PutExtra("barcodeValue", item.BarcodeValue); // start barcode viewer activity StartActivity(intent); }
/// <summary> /// Loads history. /// </summary> /// <returns> /// A history list. /// </returns> private List <Utils.BarcodeInformation> LoadHistory() { List <Utils.BarcodeInformation> values = new List <Utils.BarcodeInformation>(); if (File.Exists(_historyFilePath)) { try { // open file stream using (FileStream fileStream = new FileStream(_historyFilePath, FileMode.Open, FileAccess.Read)) { // open java object stream, which allows to deseralize objects from a file using (Java.IO.ObjectInputStream inStream = new Java.IO.ObjectInputStream(fileStream)) { // read java list JavaList arrayList = (JavaList)inStream.ReadObject(); for (int index = 0; index < arrayList.Count; index++) { // read four items: barcode writer settings + barcode value + barcode description + barcode subset name JavaList serializedStruct = arrayList[index] as JavaList; Utils.BarcodeInformation barcodeInformation = new Utils.BarcodeInformation(); barcodeInformation.BarcodeWriterSetting = Utils.DeserializeBarcodeWriterSettings((string)serializedStruct[0]); barcodeInformation.BarcodeDescription = (string)serializedStruct[1]; barcodeInformation.BarcodeSubsetName = (string)serializedStruct[2]; if (serializedStruct.Count > 3) { barcodeInformation.BarcodeValue = (string)serializedStruct[3]; } else { barcodeInformation.BarcodeValue = barcodeInformation.BarcodeWriterSetting.Value; } values.Add(barcodeInformation); } inStream.Close(); } fileStream.Close(); } } catch (Exception e) { Toast.MakeText(this, string.Format("Load history error: {0}", e.Message), ToastLength.Long).Show(); LogUnhandledException(e); } } return(values); }