From 6b308e1601d47e533eb340e21b295c73c7835052 Mon Sep 17 00:00:00 2001 From: Krunal Patel Date: Mon, 13 Mar 2023 18:38:34 +0530 Subject: [PATCH 01/33] Java basics Class & Object Abstract class, Inheritance Operators Method Constructor OOP concepts (Inheritance, Polymorphism, Abstraction, Encapsulation) Control flow loops Decision Condition --- .../krunal/demo/javaPractice/Conditions.java | 43 ++++++++++++ .../javaPractice/DifferentObjCreation.java | 57 ++++++++++++++++ .../demo/javaPractice/ExceptionHandling.java | 7 ++ .../demo/javaPractice/NumGuessGame.java | 35 ++++++++++ .../com/krunal/demo/javaPractice/OopDemo.java | 68 +++++++++++++++++++ .../krunal/demo/javaPractice/Operators.java | 64 +++++++++++++++++ 6 files changed, 274 insertions(+) create mode 100644 Demo/app/src/main/java/com/krunal/demo/javaPractice/Conditions.java create mode 100644 Demo/app/src/main/java/com/krunal/demo/javaPractice/DifferentObjCreation.java create mode 100644 Demo/app/src/main/java/com/krunal/demo/javaPractice/ExceptionHandling.java create mode 100644 Demo/app/src/main/java/com/krunal/demo/javaPractice/NumGuessGame.java create mode 100644 Demo/app/src/main/java/com/krunal/demo/javaPractice/OopDemo.java create mode 100644 Demo/app/src/main/java/com/krunal/demo/javaPractice/Operators.java diff --git a/Demo/app/src/main/java/com/krunal/demo/javaPractice/Conditions.java b/Demo/app/src/main/java/com/krunal/demo/javaPractice/Conditions.java new file mode 100644 index 0000000..e343b55 --- /dev/null +++ b/Demo/app/src/main/java/com/krunal/demo/javaPractice/Conditions.java @@ -0,0 +1,43 @@ +package com.krunal.demo.javaPractice; + +import java.util.Random; + +public class Conditions { + public static void main(String[] args) { + if (false) { + if (4 >= 5) { + System.out.println("4 > 5"); + } else { + System.out.println("5 > 4"); + } + } else if (new Random().nextBoolean()) { + System.out.println("In else-if"); + } else { + System.out.println("In else"); + } + + isVowel('a'); + isVowel('E'); + isVowel('0'); + } + + public static void isVowel(char ch) { + switch (ch) { + case 'a': + case 'e': + case 'i': + case 'o': + case 'u': + System.out.println("small case"); + case 'A': + case 'E': + case 'I': + case 'O': + case 'U': + System.out.println("Vowel"); + break; + default: + System.out.println("Constant"); + } + } +} diff --git a/Demo/app/src/main/java/com/krunal/demo/javaPractice/DifferentObjCreation.java b/Demo/app/src/main/java/com/krunal/demo/javaPractice/DifferentObjCreation.java new file mode 100644 index 0000000..6354b52 --- /dev/null +++ b/Demo/app/src/main/java/com/krunal/demo/javaPractice/DifferentObjCreation.java @@ -0,0 +1,57 @@ +package com.krunal.demo.javaPractice; + +import androidx.annotation.NonNull; + +import java.io.FileInputStream; +import java.io.ObjectInputStream; +import java.io.Serializable; + +public class DifferentObjCreation { + public static void main(String[] args) { + System.out.println("Hello World"); + createObjs(); + } + + public static void createObjs() { + Demo2 obj = new Demo2(); + + try { + obj = (Demo2) Class.forName("com.krunal.demo.javaPractice.Demo2").newInstance(); + } catch (Exception e) { + System.out.println(e.getMessage()); + } + + try { + Demo2 obj2 = (Demo2) obj.clone(); + } catch (Exception e) { + System.out.println(e.getMessage()); + } + + try { + ObjectInputStream is = new ObjectInputStream(new FileInputStream("demo2")); + Demo2 obj4 = (Demo2) is.readObject(); + } catch (Exception e) { + System.out.println(e.getMessage()); + } + } +} + +class Demo2 implements Serializable, Cloneable { + static { + System.out.println("Class initialized"); + } + + { + System.out.println("Class obj initialized"); + } + + Demo2() { + System.out.println("Demo2 constructor"); + } + + @NonNull + @Override + protected Object clone() throws CloneNotSupportedException { + return super.clone(); + } +} \ No newline at end of file diff --git a/Demo/app/src/main/java/com/krunal/demo/javaPractice/ExceptionHandling.java b/Demo/app/src/main/java/com/krunal/demo/javaPractice/ExceptionHandling.java new file mode 100644 index 0000000..3489466 --- /dev/null +++ b/Demo/app/src/main/java/com/krunal/demo/javaPractice/ExceptionHandling.java @@ -0,0 +1,7 @@ +package com.krunal.demo.javaPractice; + +public class ExceptionHandling { + public static void main(String[] args) { + + } +} diff --git a/Demo/app/src/main/java/com/krunal/demo/javaPractice/NumGuessGame.java b/Demo/app/src/main/java/com/krunal/demo/javaPractice/NumGuessGame.java new file mode 100644 index 0000000..30cccc2 --- /dev/null +++ b/Demo/app/src/main/java/com/krunal/demo/javaPractice/NumGuessGame.java @@ -0,0 +1,35 @@ +package com.krunal.demo.javaPractice; + +import java.util.Random; +import java.util.Scanner; + +public class NumGuessGame { + public static void main(String[] args) { + new Game().start(); + } +} + +class Game { + private final Scanner sc = new Scanner(System.in); + private final int num = new Random().nextInt(100); + private int tries = 0; + + public void start() { + guess: + while (true) { + System.out.print("Guess no: "); + int guess = sc.nextInt(); + + if (guess == num) { + System.out.println("Guessed correct in " + tries + " try" ); + break guess; + } else if (guess < num) { + System.out.println("Try larger number"); + tries++; + } else { + System.out.println("Try smaller number"); + tries++; + } + } + } +} diff --git a/Demo/app/src/main/java/com/krunal/demo/javaPractice/OopDemo.java b/Demo/app/src/main/java/com/krunal/demo/javaPractice/OopDemo.java new file mode 100644 index 0000000..ef3df55 --- /dev/null +++ b/Demo/app/src/main/java/com/krunal/demo/javaPractice/OopDemo.java @@ -0,0 +1,68 @@ +package com.krunal.demo.javaPractice; + +public class OopDemo { + public static void main(String[] args) { + Animal animal = new Animal() { + @Override + public boolean canProtect() { + return false; + } + }; + System.out.println(animal.speak()); + + animal = new Dog(); + ((Dog) animal).setName("Tommy"); + System.out.println(animal.speak()); + + animal = new Lion(); + System.out.println(animal.speak()); + } +} + +interface Animal { + boolean canProtect(); + default String speak() { + System.out.println("Default method"); + return "Hello world!!"; + } +} + +abstract class Domestic implements Animal { + + abstract public String getName(); + + @Override + public String speak() { + return "Hello!!"; + } +} + +class Dog extends Domestic { + private String name = ""; + + @Override + public boolean canProtect() { + return true; + } + + @Override + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } +} + +class Lion implements Animal { + @Override + public boolean canProtect() { + return false; + } + + @Override + public String speak() { + return "Roar"; + } +} diff --git a/Demo/app/src/main/java/com/krunal/demo/javaPractice/Operators.java b/Demo/app/src/main/java/com/krunal/demo/javaPractice/Operators.java new file mode 100644 index 0000000..d9c5d0d --- /dev/null +++ b/Demo/app/src/main/java/com/krunal/demo/javaPractice/Operators.java @@ -0,0 +1,64 @@ +package com.krunal.demo.javaPractice; + +public class Operators { + public static void main(String[] args) { + int n1 = 5; + int n2 = 10; + + // Arithmetic Operators + int sum = n1 + n2; + System.out.println("sum: " + sum); + int sub = n1 - n2; + System.out.println("sub: " + sub); + int mul = n1 * n2; + System.out.println("mul: " + mul); + float div = ((float) n1) / n2; + System.out.println("div: " + div); + int mod = n2-- % ++n1; + System.out.println("div: " + mod); + + // Relational Operators + if (n1 == n2) { + System.out.println("Both are same"); + } else if (n1 > n2) { + System.out.println("N1 is larger"); + } else if (n1 <= n2) { + System.out.println("N1 is same or smaller"); + } + + // Logical Operators + if (echo(true) || echo(false)) { + System.out.println("Inside ||"); + } + + if (!echo(true) && echo(false)) { + System.out.println("Inside &&"); + } + + // Assignment Operators + int num = n1; + System.out.println("num: " + num); + num += num; + System.out.println("num: " + num); + num /= --num; + System.out.println("num: " + num); + + // Ternary Operator + System.out.println(n1 > n2 ? "n1" : "n2"); + + // instance of + String s = "Hello"; + if (s instanceof String) { + System.out.println("It's String"); + } + + + } + + static boolean echo(boolean flag) { + System.out.println("flag is " + flag); + return flag; + } +} + + From 5a7a7087821e21896d80086a92ff51581eda94c4 Mon Sep 17 00:00:00 2001 From: Krunal Patel Date: Mon, 1 May 2023 10:36:30 +0530 Subject: [PATCH 02/33] Bump version --- Demo/app/build.gradle | 6 +++--- Demo/app/src/main/java/com/krunal/demo/MainActivity.kt | 4 ++-- Demo/build.gradle | 4 ++-- Demo/gradle/wrapper/gradle-wrapper.properties | 6 +++--- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/Demo/app/build.gradle b/Demo/app/build.gradle index 806d1aa..d6d2184 100644 --- a/Demo/app/build.gradle +++ b/Demo/app/build.gradle @@ -38,12 +38,12 @@ android { dependencies { - implementation 'androidx.core:core-ktx:1.9.0' + implementation 'androidx.core:core-ktx:1.10.0' implementation 'androidx.appcompat:appcompat:1.6.1' implementation 'com.google.android.material:material:1.8.0' implementation 'androidx.constraintlayout:constraintlayout:2.1.4' - implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.5.1" - implementation 'androidx.fragment:fragment-ktx:1.5.5' + implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.1" + implementation 'androidx.fragment:fragment-ktx:1.5.7' testImplementation 'junit:junit:4.13.2' androidTestImplementation 'androidx.test.ext:junit:1.1.5' diff --git a/Demo/app/src/main/java/com/krunal/demo/MainActivity.kt b/Demo/app/src/main/java/com/krunal/demo/MainActivity.kt index bd7b820..c547bdd 100644 --- a/Demo/app/src/main/java/com/krunal/demo/MainActivity.kt +++ b/Demo/app/src/main/java/com/krunal/demo/MainActivity.kt @@ -12,8 +12,8 @@ import kotlinx.coroutines.launch class MainActivity : AppCompatActivity() { - lateinit var binding: ActivityMainBinding - lateinit var mPlayer: MediaPlayer + private lateinit var binding: ActivityMainBinding + private lateinit var mPlayer: MediaPlayer private val viewModel: MainActivityViewModel by viewModels() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) diff --git a/Demo/build.gradle b/Demo/build.gradle index 443cab9..c84cccf 100644 --- a/Demo/build.gradle +++ b/Demo/build.gradle @@ -1,6 +1,6 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. plugins { - id 'com.android.application' version '7.4.1' apply false - id 'com.android.library' version '7.4.1' apply false + id 'com.android.application' version '8.0.0' apply false + id 'com.android.library' version '8.0.0' apply false id 'org.jetbrains.kotlin.android' version '1.8.0' apply false } \ No newline at end of file diff --git a/Demo/gradle/wrapper/gradle-wrapper.properties b/Demo/gradle/wrapper/gradle-wrapper.properties index 6512052..83b3b25 100644 --- a/Demo/gradle/wrapper/gradle-wrapper.properties +++ b/Demo/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Wed Feb 15 12:28:48 IST 2023 +#Mon May 01 09:43:46 IST 2023 distributionBase=GRADLE_USER_HOME -distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-bin.zip distributionPath=wrapper/dists -zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.1.1-bin.zip zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists From 566b26b1109e45d627e5d2efb25dfd567f2b0379 Mon Sep 17 00:00:00 2001 From: Krunal Patel Date: Mon, 1 May 2023 18:49:31 +0530 Subject: [PATCH 03/33] Add: UI Components --- Demo/app/src/main/AndroidManifest.xml | 9 ++ .../com/krunal/demo/UIComponentsActivity.kt | 20 +++ .../demo/uicomponents/ButtonFragment.kt | 57 +++++++ .../demo/uicomponents/CheckboxFragment.kt | 32 ++++ .../krunal/demo/uicomponents/ToastFragment.kt | 74 +++++++++ .../src/main/res/drawable/gradient_button.xml | 9 ++ Demo/app/src/main/res/drawable/ic_android.xml | 5 + Demo/app/src/main/res/drawable/ic_check.xml | 5 + Demo/app/src/main/res/drawable/ic_cross.xml | 5 + Demo/app/src/main/res/drawable/ic_info.xml | 5 + .../src/main/res/drawable/rounded_toast.xml | 11 ++ .../main/res/layout/activity_uicomponents.xml | 18 +++ Demo/app/src/main/res/layout/custom_toast.xml | 23 +++ .../src/main/res/layout/fragment_button.xml | 148 ++++++++++++++++++ .../src/main/res/layout/fragment_checkbox.xml | 55 +++++++ .../src/main/res/layout/fragment_toast.xml | 35 +++++ Demo/app/src/main/res/values/strings.xml | 26 +++ 17 files changed, 537 insertions(+) create mode 100644 Demo/app/src/main/java/com/krunal/demo/UIComponentsActivity.kt create mode 100644 Demo/app/src/main/java/com/krunal/demo/uicomponents/ButtonFragment.kt create mode 100644 Demo/app/src/main/java/com/krunal/demo/uicomponents/CheckboxFragment.kt create mode 100644 Demo/app/src/main/java/com/krunal/demo/uicomponents/ToastFragment.kt create mode 100644 Demo/app/src/main/res/drawable/gradient_button.xml create mode 100644 Demo/app/src/main/res/drawable/ic_android.xml create mode 100644 Demo/app/src/main/res/drawable/ic_check.xml create mode 100644 Demo/app/src/main/res/drawable/ic_cross.xml create mode 100644 Demo/app/src/main/res/drawable/ic_info.xml create mode 100644 Demo/app/src/main/res/drawable/rounded_toast.xml create mode 100644 Demo/app/src/main/res/layout/activity_uicomponents.xml create mode 100644 Demo/app/src/main/res/layout/custom_toast.xml create mode 100644 Demo/app/src/main/res/layout/fragment_button.xml create mode 100644 Demo/app/src/main/res/layout/fragment_checkbox.xml create mode 100644 Demo/app/src/main/res/layout/fragment_toast.xml diff --git a/Demo/app/src/main/AndroidManifest.xml b/Demo/app/src/main/AndroidManifest.xml index 3410a78..b1dd697 100644 --- a/Demo/app/src/main/AndroidManifest.xml +++ b/Demo/app/src/main/AndroidManifest.xml @@ -11,6 +11,15 @@ android:supportsRtl="true" android:theme="@style/Theme.Demo" tools:targetApi="31"> + + + + + + + diff --git a/Demo/app/src/main/java/com/krunal/demo/UIComponentsActivity.kt b/Demo/app/src/main/java/com/krunal/demo/UIComponentsActivity.kt new file mode 100644 index 0000000..93e767b --- /dev/null +++ b/Demo/app/src/main/java/com/krunal/demo/UIComponentsActivity.kt @@ -0,0 +1,20 @@ +package com.krunal.demo + +import androidx.appcompat.app.AppCompatActivity +import android.os.Bundle +import com.krunal.demo.uicomponents.ButtonFragment +import com.krunal.demo.uicomponents.ToastFragment + +class UIComponentsActivity : AppCompatActivity() { + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_uicomponents) + setupFragment() + } + + private fun setupFragment() { + supportFragmentManager.beginTransaction() + .replace(R.id.uiComponentsFragment, ToastFragment()) + .commit() + } +} \ No newline at end of file diff --git a/Demo/app/src/main/java/com/krunal/demo/uicomponents/ButtonFragment.kt b/Demo/app/src/main/java/com/krunal/demo/uicomponents/ButtonFragment.kt new file mode 100644 index 0000000..fe0ed94 --- /dev/null +++ b/Demo/app/src/main/java/com/krunal/demo/uicomponents/ButtonFragment.kt @@ -0,0 +1,57 @@ +package com.krunal.demo.uicomponents + +import android.os.Bundle +import android.util.Log +import android.view.LayoutInflater +import android.view.View +import android.view.View.OnClickListener +import android.view.ViewGroup +import android.widget.Button +import android.widget.Toast +import androidx.core.view.children +import androidx.fragment.app.Fragment +import com.google.android.material.button.MaterialButton +import com.krunal.demo.R +import com.krunal.demo.databinding.FragmentButtonBinding + +class ButtonFragment : Fragment(R.layout.fragment_button), OnClickListener { + private lateinit var binding: FragmentButtonBinding + + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? + ): View { + binding = FragmentButtonBinding.inflate(layoutInflater) + return binding.root + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + setupClickListener() + } + + override fun onClick(view: View?) { + (view as? MaterialButton)?.let { + Toast.makeText(requireContext(), "${it.text} clicked", Toast.LENGTH_SHORT).show() + } + } + + private fun setupClickListener() { + + binding.btnNormal.setOnClickListener(this) + binding.btnBordered.setOnClickListener(this) + binding.appCompatButton.setOnClickListener(this) + binding.btnDisabled.setOnClickListener(this) + binding.btnOutlined.setOnClickListener(this) + binding.btnText.setOnClickListener(this) + binding.imgBtnImage.setOnClickListener(this) + binding.btnInfo.setOnClickListener(this) + binding.btnGradient.setOnClickListener(this) + + binding.switchEnable.setOnCheckedChangeListener { btn, checked -> + binding.root.children + .filterNot { it == binding.switchEnable } + .forEach { it.isEnabled = checked } + btn.text = if (checked) getString(R.string.enabled_switch) else getString(R.string.disabled_switch) + } + } +} \ No newline at end of file diff --git a/Demo/app/src/main/java/com/krunal/demo/uicomponents/CheckboxFragment.kt b/Demo/app/src/main/java/com/krunal/demo/uicomponents/CheckboxFragment.kt new file mode 100644 index 0000000..10fe709 --- /dev/null +++ b/Demo/app/src/main/java/com/krunal/demo/uicomponents/CheckboxFragment.kt @@ -0,0 +1,32 @@ +package com.krunal.demo.uicomponents + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.fragment.app.Fragment +import com.krunal.demo.R +import com.krunal.demo.databinding.FragmentCheckboxBinding + +class CheckboxFragment : Fragment(R.layout.fragment_checkbox) { + + private lateinit var binding: FragmentCheckboxBinding + private var selectedLanguages = mutableListOf() + + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? + ): View { + binding = FragmentCheckboxBinding.inflate(layoutInflater) + return binding.root + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + setupCheckbox() + } + + private fun setupCheckbox() { + selectedLanguages.add(binding.cbEnglish.text.toString()) + selectedLanguages.add(binding.cbHindi.text.toString()) + } +} \ No newline at end of file diff --git a/Demo/app/src/main/java/com/krunal/demo/uicomponents/ToastFragment.kt b/Demo/app/src/main/java/com/krunal/demo/uicomponents/ToastFragment.kt new file mode 100644 index 0000000..b6822f5 --- /dev/null +++ b/Demo/app/src/main/java/com/krunal/demo/uicomponents/ToastFragment.kt @@ -0,0 +1,74 @@ +package com.krunal.demo.uicomponents + +import android.graphics.Color +import android.os.Bundle +import android.view.Gravity +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import android.widget.Toast +import androidx.core.content.res.ResourcesCompat +import androidx.fragment.app.Fragment +import com.krunal.demo.R +import com.krunal.demo.databinding.FragmentToastBinding + +class ToastFragment : Fragment(R.layout.fragment_toast) { + private lateinit var binding: FragmentToastBinding + + override fun onCreateView( + inflater: LayoutInflater, + container: ViewGroup?, + savedInstanceState: Bundle? + ): View { + binding = FragmentToastBinding.inflate(layoutInflater) + return binding.root + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + setupButtons() + } + + // Set click listeners for buttons to show toast + private fun setupButtons() { + // Short toast + binding.btnShortToast.setOnClickListener { + Toast.makeText(requireContext(), "This is short Toast", Toast.LENGTH_SHORT).show() + } + + // Long toast + binding.btnLongToast.setOnClickListener { + Toast.makeText(requireContext(), "This is long Toast", Toast.LENGTH_LONG).show() + } + + // Custom short success toast + binding.btnSuccessToast.setOnClickListener { + showToast(R.drawable.ic_check, "Custom success toast", backgroundColor = Color.GREEN) + } + + // Custom long error toast + binding.btnErrorToast.setOnClickListener { + showToast(R.drawable.ic_cross, "Custom error toast", Toast.LENGTH_LONG, Color.RED) + } + } + + // Make and show custom toast + private fun showToast(iconId: Int, text: String, length: Int = Toast.LENGTH_SHORT, backgroundColor: Int = Color.GRAY) { + val toastView = layoutInflater.inflate(R.layout.custom_toast, requireActivity().findViewById(R.id.customToast)) + val imgViewStatus = toastView.findViewById(R.id.imgViewStatus) + val tvMessage = toastView.findViewById(R.id.tvMessage) + + toastView.setBackgroundColor(backgroundColor) + imgViewStatus.setImageResource(iconId) + tvMessage.text = text + + Toast(requireContext()).apply { + setGravity(Gravity.CENTER, 0, 0) + duration = length + view = toastView + show() + } + } +} \ No newline at end of file diff --git a/Demo/app/src/main/res/drawable/gradient_button.xml b/Demo/app/src/main/res/drawable/gradient_button.xml new file mode 100644 index 0000000..17f4ae1 --- /dev/null +++ b/Demo/app/src/main/res/drawable/gradient_button.xml @@ -0,0 +1,9 @@ + + + + + \ No newline at end of file diff --git a/Demo/app/src/main/res/drawable/ic_android.xml b/Demo/app/src/main/res/drawable/ic_android.xml new file mode 100644 index 0000000..1168496 --- /dev/null +++ b/Demo/app/src/main/res/drawable/ic_android.xml @@ -0,0 +1,5 @@ + + + diff --git a/Demo/app/src/main/res/drawable/ic_check.xml b/Demo/app/src/main/res/drawable/ic_check.xml new file mode 100644 index 0000000..2501e9f --- /dev/null +++ b/Demo/app/src/main/res/drawable/ic_check.xml @@ -0,0 +1,5 @@ + + + diff --git a/Demo/app/src/main/res/drawable/ic_cross.xml b/Demo/app/src/main/res/drawable/ic_cross.xml new file mode 100644 index 0000000..70db409 --- /dev/null +++ b/Demo/app/src/main/res/drawable/ic_cross.xml @@ -0,0 +1,5 @@ + + + diff --git a/Demo/app/src/main/res/drawable/ic_info.xml b/Demo/app/src/main/res/drawable/ic_info.xml new file mode 100644 index 0000000..e0ecb40 --- /dev/null +++ b/Demo/app/src/main/res/drawable/ic_info.xml @@ -0,0 +1,5 @@ + + + diff --git a/Demo/app/src/main/res/drawable/rounded_toast.xml b/Demo/app/src/main/res/drawable/rounded_toast.xml new file mode 100644 index 0000000..db31de8 --- /dev/null +++ b/Demo/app/src/main/res/drawable/rounded_toast.xml @@ -0,0 +1,11 @@ + + + + + + \ No newline at end of file diff --git a/Demo/app/src/main/res/layout/activity_uicomponents.xml b/Demo/app/src/main/res/layout/activity_uicomponents.xml new file mode 100644 index 0000000..5851e1c --- /dev/null +++ b/Demo/app/src/main/res/layout/activity_uicomponents.xml @@ -0,0 +1,18 @@ + + + + + + \ No newline at end of file diff --git a/Demo/app/src/main/res/layout/custom_toast.xml b/Demo/app/src/main/res/layout/custom_toast.xml new file mode 100644 index 0000000..44d0ada --- /dev/null +++ b/Demo/app/src/main/res/layout/custom_toast.xml @@ -0,0 +1,23 @@ + + + + + + + \ No newline at end of file diff --git a/Demo/app/src/main/res/layout/fragment_button.xml b/Demo/app/src/main/res/layout/fragment_button.xml new file mode 100644 index 0000000..b072021 --- /dev/null +++ b/Demo/app/src/main/res/layout/fragment_button.xml @@ -0,0 +1,148 @@ + + + +