{"data":{"site":{"siteMetadata":{"title":"IJHDev Blog","author":"Ian Hayward"}},"markdownRemark":{"id":"771e4fd2-17fd-51fa-9579-90668e9550a7","html":"<p>A small native Android/Kotlin library that helps build dialogs with however many buttons in however many styles you want.</p>\n<!-- end -->\n<h1>What is it</h1>\n<p>\n  <span\n    class=\"gatsby-resp-image-wrapper\"\n    style=\"position: relative; display: block; margin: 15px -30px !important max-width: 700px; margin-left: auto; margin-right: auto;\"\n  >\n    <span\n      class=\"gatsby-resp-image-background-image\"\n      style=\"padding-bottom: 25%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAFABQDASIAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAAAAUE/8QAFQEBAQAAAAAAAAAAAAAAAAAAAAH/2gAMAwEAAhADEAAAAamoSaF//8QAFxAAAwEAAAAAAAAAAAAAAAAAAQMQMf/aAAgBAQABBQJMO//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQMBAT8BP//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQIBAT8BP//EABYQAQEBAAAAAAAAAAAAAAAAAAEAEP/aAAgBAQAGPwJxv//EABgQAAIDAAAAAAAAAAAAAAAAAAARAaHB/9oACAEBAAE/IcxqS0f/2gAMAwEAAgADAAAAEAQP/8QAFREBAQAAAAAAAAAAAAAAAAAAARD/2gAIAQMBAT8QZ//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQIBAT8QP//EABsQAAICAwEAAAAAAAAAAAAAAAABESFBobHw/9oACAEBAAE/EFTcvLLCtxGTcdP/2Q=='); background-size: cover; display: block;\"\n    >\n      <img\n        class=\"gatsby-resp-image-image\"\n        style=\"width: 100%; height: 100%; margin: 0; vertical-align: middle; position: absolute; top: 0; left: 0; box-shadow: inset 0px 0px 0px 400px white;\"\n        alt=\"Dialog\"\n        title=\"\"\n        src=\"/static/dialogsmol-40da271c284577ba7f7c782e97d8ddfe-177e4.jpeg\"\n        srcset=\"/static/dialogsmol-40da271c284577ba7f7c782e97d8ddfe-6c2d5.jpeg 175w,\n/static/dialogsmol-40da271c284577ba7f7c782e97d8ddfe-3d17c.jpeg 350w,\n/static/dialogsmol-40da271c284577ba7f7c782e97d8ddfe-177e4.jpeg 700w,\n/static/dialogsmol-40da271c284577ba7f7c782e97d8ddfe-40bb7.jpeg 1050w,\n/static/dialogsmol-40da271c284577ba7f7c782e97d8ddfe-562d0.jpeg 1400w\"\n        sizes=\"(max-width: 700px) 100vw, 700px\"\n      />\n    </span>\n  </span>\n  </p>\n<p>Android dialogs can be a bit of a faffy affair, this small lib gives you a range of customizability while staying native so a lower risk of compatibility issues down the road.</p>\n<h2>Latest version for gradle</h2>\n<p>implementation ‘com.github.seperot:SimpleReusableDialog:1.5’</p>\n<h1>How to use it</h1>\n<p>\n  <span\n    class=\"gatsby-resp-image-wrapper\"\n    style=\"position: relative; display: block; margin: 15px -30px !important max-width: 700px; margin-left: auto; margin-right: auto;\"\n  >\n    <span\n      class=\"gatsby-resp-image-background-image\"\n      style=\"padding-bottom: 25%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAFABQDASIAAhEBAxEB/8QAFwABAAMAAAAAAAAAAAAAAAAAAAIFBv/EABUBAQEAAAAAAAAAAAAAAAAAAAIB/9oADAMBAAIQAxAAAAGVQFa8U//EABkQAAMAAwAAAAAAAAAAAAAAAAECAwQREv/aAAgBAQABBQLJZS1X7eQ1L//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQMBAT8BP//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQIBAT8BP//EABkQAAIDAQAAAAAAAAAAAAAAAAARAQJhIv/aAAgBAQAGPwLqjWjKxh//xAAaEAEAAwADAAAAAAAAAAAAAAABABEhMWGx/9oACAEBAAE/IXvPUOYyMrAnQR8n/9oADAMBAAIAAwAAABAL7//EABYRAQEBAAAAAAAAAAAAAAAAAAEQEf/aAAgBAwEBPxBMn//EABYRAQEBAAAAAAAAAAAAAAAAAAEQEf/aAAgBAgEBPxAdn//EABoQAQEAAgMAAAAAAAAAAAAAAAERADEhQaH/2gAIAQEAAT8QPLHInHnrNBBAbAIYBWg+M//Z'); background-size: cover; display: block;\"\n    >\n      <img\n        class=\"gatsby-resp-image-image\"\n        style=\"width: 100%; height: 100%; margin: 0; vertical-align: middle; position: absolute; top: 0; left: 0; box-shadow: inset 0px 0px 0px 400px white;\"\n        alt=\"How it works\"\n        title=\"\"\n        src=\"/static/howitworks-e3b80309636a8a749512543036036df2-177e4.jpeg\"\n        srcset=\"/static/howitworks-e3b80309636a8a749512543036036df2-6c2d5.jpeg 175w,\n/static/howitworks-e3b80309636a8a749512543036036df2-3d17c.jpeg 350w,\n/static/howitworks-e3b80309636a8a749512543036036df2-177e4.jpeg 700w,\n/static/howitworks-e3b80309636a8a749512543036036df2-40bb7.jpeg 1050w,\n/static/howitworks-e3b80309636a8a749512543036036df2-562d0.jpeg 1400w\"\n        sizes=\"(max-width: 700px) 100vw, 700px\"\n      />\n    </span>\n  </span>\n  </p>\n<h2>Example button</h2>\n<div class=\"gatsby-highlight\" data-language=\"btndemo.setonclicklistener \"><pre class=\"language-btndemo.setonclicklistener \"><code class=\"language-btndemo.setonclicklistener \">       registerButton(\n           getString(\n               R.string.dialog_one_button_one),\n               R.color.colorPrimary,\n               android.R.color.white,\n               object : ReusableDialogListener {\n                   override fun onDialogButtonClick\n                   dialogFragment: DialogFragment, index: Int) {\n                       dialogFragment.dismiss()\n                   }})\n\n           ReusableDialog.dialogCancelable(false)\n\n           ReusableDialog.createDialogInstance(\n               getString(R.string.dialog_one), \n               getString(R.string.dialog_one_text), \n               null).show(\n               supportFragmentManager, null\n           )\n       }</code></pre></div>\n<h2>Working parts</h2>\n<h3>registerButton</h3>\n<p>RegisterButton adds a button to the next time you call createDialogInstance it has four parts</p>\n<ul>\n<li>buttonTitle: The text the button shows</li>\n<li>buttonBackground: The button background color, things like R.color or android.R.color work</li>\n<li>textColor: The button text color, again things like R.color or android.R.color work</li>\n<li>dialogButtonListener: The button onClickListener, this has to be called in the following format currently until I can figure out how to make it look nicer</li>\n</ul>\n<h3>dialogCancelable</h3>\n<p>A simple boolean that turns on or off the users ability to cancel out of the dialog without choosing an option. This also needs to be done before you call createDialogInstance and will reset after use true = they can cancel, false = they cannot cancel This also works for the back button</p>\n<h3>createDialogInstance</h3>\n<p>Calls the dialog and shows it to the user, grabs any registered buttons and checks if the dialog is cancelable or not then displays. Has three fields</p>\n<ul>\n<li>title: The dialog title</li>\n<li>infoText: The dialog content</li>\n<li>topIcon: The icon at the top of the Dialog, set as null to remove from Dialog</li>\n</ul>\n<p>Finally be sure to add “.show(supportFragmentManager, null)” At the end to display the dialog</p>\n<p>As you can see in this second example, you can expand this to as many buttons as you like</p>\n<div class=\"gatsby-highlight\" data-language=\"btndemo2.setonclicklistener \"><pre class=\"language-btndemo2.setonclicklistener \"><code class=\"language-btndemo2.setonclicklistener \">            registerButton(\n                getString(R.string.dialog_two_button_one),\n                R.color.colorPrimary,\n                android.R.color.black,\n                object: ReusableDialogListener {\n                    override fun onDialogButtonClick(\n                        dialogFragment: DialogFragment, \n                        index: Int) {\n                    dialogFragment.dismiss()\n                    Toast.makeText(\n                        applicationContext, \n                        getString(R.string.toast_one), \n                        Toast.LENGTH_LONG).show()\n                }})\n\n            registerButton(\n                getString(R.string.dialog_two_button_two),\n                R.color.colorPrimaryDark,\n                android.R.color.white,\n               object: ReusableDialogListener {\n                   override fun onDialogButtonClick(\n                       dialogFragment: DialogFragment, \n                       index: Int) {\n                       dialogFragment.dismiss()\n                       Toast.makeText(\n                           applicationContext,\n                           getString(R.string.toast_two),\n                           Toast.LENGTH_LONG\n                       ).show()\n                   }})\n\n            ReusableDialog.createDialogInstance(\n                getString(R.string.dialog_two),\n                getString(R.string.dialog_two_text),\n                R.drawable.pupcat\n            ).show(\n                supportFragmentManager, null\n            )\n        }</code></pre></div>\n<h1>Planned features</h1>\n<p><img src=\"./images/pla.jpeg\" alt=\"Future Plans\"></p>\n<ul>\n<li>Add a setting for custom button margin</li>\n<li>Add a setting for custom button padding</li>\n<li>Add set dialog size and scroll</li>\n</ul>\n<h1>Check out the library here</h1>\n<p>\n  <span\n    class=\"gatsby-resp-image-wrapper\"\n    style=\"position: relative; display: block; margin: 15px -30px !important max-width: 700px; margin-left: auto; margin-right: auto;\"\n  >\n    <span\n      class=\"gatsby-resp-image-background-image\"\n      style=\"padding-bottom: 25%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAFABQDASIAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAAAAQF/8QAFgEBAQEAAAAAAAAAAAAAAAAAAAID/9oADAMBAAIQAxAAAAGHTI0gB//EABgQAQEAAwAAAAAAAAAAAAAAAAEAAhMh/9oACAEBAAEFAgsA09v/xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAEDAQE/AT//xAAVEQEBAAAAAAAAAAAAAAAAAAABEP/aAAgBAgEBPwFn/8QAFxAAAwEAAAAAAAAAAAAAAAAAAAExEf/aAAgBAQAGPwKiWFP/xAAZEAADAQEBAAAAAAAAAAAAAAAAARFhIUH/2gAIAQEAAT8hYl2tLLovgf/aAAwDAQACAAMAAAAQ8C//xAAVEQEBAAAAAAAAAAAAAAAAAAABEP/aAAgBAwEBPxAJ/8QAFREBAQAAAAAAAAAAAAAAAAAAAAH/2gAIAQIBAT8QpH//xAAaEAEBAAMBAQAAAAAAAAAAAAABEQAhMUFR/9oACAEBAAE/EO+VpsJ99x4BGpu7cRmg30vuf//Z'); background-size: cover; display: block;\"\n    >\n      <img\n        class=\"gatsby-resp-image-image\"\n        style=\"width: 100%; height: 100%; margin: 0; vertical-align: middle; position: absolute; top: 0; left: 0; box-shadow: inset 0px 0px 0px 400px white;\"\n        alt=\"Check it out\"\n        title=\"\"\n        src=\"/static/library-8c5eda631c09c0985c7804e9d4cede0e-177e4.jpeg\"\n        srcset=\"/static/library-8c5eda631c09c0985c7804e9d4cede0e-6c2d5.jpeg 175w,\n/static/library-8c5eda631c09c0985c7804e9d4cede0e-3d17c.jpeg 350w,\n/static/library-8c5eda631c09c0985c7804e9d4cede0e-177e4.jpeg 700w,\n/static/library-8c5eda631c09c0985c7804e9d4cede0e-40bb7.jpeg 1050w,\n/static/library-8c5eda631c09c0985c7804e9d4cede0e-562d0.jpeg 1400w\"\n        sizes=\"(max-width: 700px) 100vw, 700px\"\n      />\n    </span>\n  </span>\n  </p>\n<p><a href=\"https://github.com/seperot/SimpleReusableDialog\">https://github.com/seperot/SimpleReusableDialog</a></p>","frontmatter":{"title":"Simple Reusable Dialog for Android","date":"April 08, 2020","featuredImage":{"childImageSharp":{"sizes":{"base64":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAIABQDASIAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAAAAQF/8QAFAEBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQACEAMQAAAB0qAgB//EABgQAAIDAAAAAAAAAAAAAAAAAAADEBEi/9oACAEBAAEFAlUYj//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQMBAT8BP//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQIBAT8BP//EABgQAAIDAAAAAAAAAAAAAAAAAAARARBC/9oACAEBAAY/ApaM1//EABgQAAIDAAAAAAAAAAAAAAAAAAAQIUGh/9oACAEBAAE/IYdSrP/aAAwDAQACAAMAAAAQgA//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAEDAQE/ED//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAECAQE/ED//xAAbEAACAgMBAAAAAAAAAAAAAAABEQAxIUGxwf/aAAgBAQABPxBrAFhY+wHbiGypz//Z","aspectRatio":2.4518388791593697,"src":"/static/dialogbig-9fe7d92f6d334d5a7f706b18d7b13c82-6b3a1.jpg","srcSet":"/static/dialogbig-9fe7d92f6d334d5a7f706b18d7b13c82-182ff.jpg 213w,\n/static/dialogbig-9fe7d92f6d334d5a7f706b18d7b13c82-7f5c7.jpg 425w,\n/static/dialogbig-9fe7d92f6d334d5a7f706b18d7b13c82-6b3a1.jpg 850w,\n/static/dialogbig-9fe7d92f6d334d5a7f706b18d7b13c82-45cc1.jpg 1275w,\n/static/dialogbig-9fe7d92f6d334d5a7f706b18d7b13c82-055dc.jpg 1400w","sizes":"(max-width: 850px) 100vw, 850px"}}}}}},"pageContext":{"slug":"/simple-reusable-dialog/","previous":{"fields":{"slug":"/golden-path-document/"},"excerpt":"A golden path document is the best way for new starters to come in strong and help those that come after them\n","frontmatter":{"title":"Setting up a Golden Path Document","date":"February 4, 2020","featuredImage":{"childImageSharp":{"sizes":{"base64":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAIABQDASIAAhEBAxEB/8QAFwABAAMAAAAAAAAAAAAAAAAAAAMEBf/EABYBAQEBAAAAAAAAAAAAAAAAAAIDBP/aAAwDAQACEAMQAAABr6RicAFP/8QAGBABAQADAAAAAAAAAAAAAAAAAQIAAyL/2gAIAQEAAQUCLzV1FiV//8QAFxEBAQEBAAAAAAAAAAAAAAAAAQACEf/aAAgBAwEBPwHK3W//xAAWEQEBAQAAAAAAAAAAAAAAAAABAhD/2gAIAQIBAT8BoM//xAAYEAEAAwEAAAAAAAAAAAAAAAAAAQIRIf/aAAgBAQAGPwJtocf/xAAYEAEBAQEBAAAAAAAAAAAAAAABABExQf/aAAgBAQABPyEBgeg5ZpaX/9oADAMBAAIAAwAAABAMP//EABYRAQEBAAAAAAAAAAAAAAAAAAABYf/aAAgBAwEBPxC5s//EABYRAQEBAAAAAAAAAAAAAAAAAAABEf/aAAgBAgEBPxCZMf/EABoQAQADAAMAAAAAAAAAAAAAAAEAESExQXH/2gAIAQEAAT8Qxgr7O9BvhqM7CWW7P//Z","aspectRatio":2.4518388791593697,"src":"/static/goldenpathlarge-cee690aa1396307abec7f48cd3a95f08-6b3a1.jpg","srcSet":"/static/goldenpathlarge-cee690aa1396307abec7f48cd3a95f08-182ff.jpg 213w,\n/static/goldenpathlarge-cee690aa1396307abec7f48cd3a95f08-7f5c7.jpg 425w,\n/static/goldenpathlarge-cee690aa1396307abec7f48cd3a95f08-6b3a1.jpg 850w,\n/static/goldenpathlarge-cee690aa1396307abec7f48cd3a95f08-45cc1.jpg 1275w,\n/static/goldenpathlarge-cee690aa1396307abec7f48cd3a95f08-055dc.jpg 1400w","sizes":"(max-width: 850px) 100vw, 850px"}}}}},"next":{"fields":{"slug":"/android-cicd-image/"},"excerpt":"\nEasy to use CI/CD Image for Android builds\n\n","frontmatter":{"title":"Android Fastlane CICD Image","date":"November 1, 2021","featuredImage":{"childImageSharp":{"sizes":{"base64":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAIABQDASIAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAAAAME/8QAFwEAAwEAAAAAAAAAAAAAAAAAAAEEBf/aAAwDAQACEAMQAAABjc0I84Z//8QAFxABAAMAAAAAAAAAAAAAAAAAAAMREv/aAAgBAQABBQJJin//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAEDAQE/AT//xAAWEQADAAAAAAAAAAAAAAAAAAAQESH/2gAIAQIBAT8BVH//xAAXEAADAQAAAAAAAAAAAAAAAAAAARAS/9oACAEBAAY/AhZn/8QAGxAAAQQDAAAAAAAAAAAAAAAAAQAQESExQWH/2gAIAQEAAT8hGbWgTwt//9oADAMBAAIAAwAAABDzz//EABYRAAMAAAAAAAAAAAAAAAAAABARQf/aAAgBAwEBPxBwf//EABYRAQEBAAAAAAAAAAAAAAAAAAEQEf/aAAgBAgEBPxB0Gf/EABoQAAICAwAAAAAAAAAAAAAAAAERIUEAEDH/2gAIAQEAAT8QRKOc5EWLBjFN3r//2Q==","aspectRatio":2.4518388791593697,"src":"/static/androidCILarge-c031c15a911066648876b7260d9ca5a9-6b3a1.jpg","srcSet":"/static/androidCILarge-c031c15a911066648876b7260d9ca5a9-182ff.jpg 213w,\n/static/androidCILarge-c031c15a911066648876b7260d9ca5a9-7f5c7.jpg 425w,\n/static/androidCILarge-c031c15a911066648876b7260d9ca5a9-6b3a1.jpg 850w,\n/static/androidCILarge-c031c15a911066648876b7260d9ca5a9-45cc1.jpg 1275w,\n/static/androidCILarge-c031c15a911066648876b7260d9ca5a9-055dc.jpg 1400w","sizes":"(max-width: 850px) 100vw, 850px"}}}}}}}