├── .idea ├── .name ├── vcs.xml ├── misc.xml ├── runConfigurations.xml ├── gradle.xml ├── jarRepositories.xml ├── $CACHE_FILE$ └── codeStyles │ └── Project.xml ├── app ├── .gitignore ├── src │ ├── main │ │ ├── res │ │ │ ├── font │ │ │ │ ├── cerebri_sans_bold.ttf │ │ │ │ └── cerebri_sans_regular.ttf │ │ │ ├── mipmap-hdpi │ │ │ │ ├── ic_launcher.png │ │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-mdpi │ │ │ │ ├── ic_launcher.png │ │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-xhdpi │ │ │ │ ├── ic_launcher.png │ │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-xxhdpi │ │ │ │ ├── ic_launcher.png │ │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-xxxhdpi │ │ │ │ ├── ic_launcher.png │ │ │ │ └── ic_launcher_round.png │ │ │ ├── values │ │ │ │ ├── colors.xml │ │ │ │ ├── styles.xml │ │ │ │ └── strings.xml │ │ │ ├── mipmap-anydpi-v26 │ │ │ │ ├── ic_launcher.xml │ │ │ │ └── ic_launcher_round.xml │ │ │ ├── drawable │ │ │ │ ├── icon_background.xml │ │ │ │ ├── ic_libraries.xml │ │ │ │ ├── ic_about.xml │ │ │ │ ├── ic_facebook.xml │ │ │ │ ├── ic_twitter.xml │ │ │ │ ├── ic_contributors.xml │ │ │ │ ├── ic_linkedin.xml │ │ │ │ ├── ic_fingerprint.xml │ │ │ │ ├── ic_instagram.xml │ │ │ │ ├── ic_linkedin_2.xml │ │ │ │ ├── ic_github.xml │ │ │ │ └── ic_launcher_background.xml │ │ │ ├── menu │ │ │ │ └── bottom_menu.xml │ │ │ ├── navigation │ │ │ │ └── bottom_navigation.xml │ │ │ ├── layout │ │ │ │ ├── library_card_item.xml │ │ │ │ ├── fragment_libraries.xml │ │ │ │ ├── activity_main.xml │ │ │ │ ├── fragment_contributors.xml │ │ │ │ ├── activity_shimmer.xml │ │ │ │ ├── activity_lottie.xml │ │ │ │ ├── activity_exo_player.xml │ │ │ │ ├── fragment_about.xml │ │ │ │ ├── activity_glide.xml │ │ │ │ ├── contributors_list_item.xml │ │ │ │ ├── activity_biometric.xml │ │ │ │ ├── activity_fast_android_networking.xml │ │ │ │ └── activity_retrofit.xml │ │ │ ├── drawable-v24 │ │ │ │ └── ic_launcher_foreground.xml │ │ │ └── raw │ │ │ │ └── claping_hands.json │ │ ├── java │ │ │ └── com │ │ │ │ └── acmvit │ │ │ │ └── libground │ │ │ │ ├── retrofit │ │ │ │ ├── ApiEndPoint.java │ │ │ │ ├── RetrofitClient.java │ │ │ │ ├── ApiResponse.java │ │ │ │ └── RetrofitActivity.java │ │ │ │ ├── LottieActivity.java │ │ │ │ ├── Constants.java │ │ │ │ ├── ShimmerActivity.java │ │ │ │ ├── MainActivity.java │ │ │ │ ├── Contributors.java │ │ │ │ ├── ContributionsAdapter.java │ │ │ │ ├── GlideActivity.java │ │ │ │ ├── LibrariesFragment.java │ │ │ │ ├── FastAndroidNetworkingActivity.java │ │ │ │ ├── ContributorsFragment.java │ │ │ │ ├── ExoPlayerActivity.java │ │ │ │ ├── AboutFragment.java │ │ │ │ ├── LibrariesAdapter.java │ │ │ │ └── BiometricActivity.java │ │ └── AndroidManifest.xml │ ├── test │ │ └── java │ │ │ └── com │ │ │ └── acmvit │ │ │ └── libground │ │ │ └── ExampleUnitTest.java │ └── androidTest │ │ └── java │ │ └── com │ │ └── acmvit │ │ └── libground │ │ └── ExampleInstrumentedTest.java ├── proguard-rules.pro └── build.gradle ├── settings.gradle ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── .gitignore ├── .github └── workflows │ ├── appbrickie.yml │ └── ci.yml ├── gradle.properties ├── gradlew.bat ├── README.md └── gradlew /.idea/.name: -------------------------------------------------------------------------------- 1 | Libground -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /settings.gradle: -------------------------------------------------------------------------------- 1 | include ':app' 2 | rootProject.name = "Libground" -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ACM-VIT/libground/HEAD/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /app/src/main/res/font/cerebri_sans_bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ACM-VIT/libground/HEAD/app/src/main/res/font/cerebri_sans_bold.ttf -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ACM-VIT/libground/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ACM-VIT/libground/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ACM-VIT/libground/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/font/cerebri_sans_regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ACM-VIT/libground/HEAD/app/src/main/res/font/cerebri_sans_regular.ttf -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ACM-VIT/libground/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ACM-VIT/libground/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ACM-VIT/libground/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ACM-VIT/libground/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ACM-VIT/libground/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ACM-VIT/libground/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ACM-VIT/libground/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | .gradle 3 | /local.properties 4 | /.idea/caches 5 | /.idea/libraries 6 | /.idea/modules.xml 7 | /.idea/workspace.xml 8 | /.idea/navEditor.xml 9 | /.idea/assetWizardSettings.xml 10 | .DS_Store 11 | /build 12 | /captures 13 | .externalNativeBuild 14 | .cxx 15 | -------------------------------------------------------------------------------- /app/src/main/java/com/acmvit/libground/retrofit/ApiEndPoint.java: -------------------------------------------------------------------------------- 1 | package com.acmvit.libground.retrofit; 2 | 3 | import retrofit2.Call; 4 | import retrofit2.http.GET; 5 | 6 | public interface ApiEndPoint { 7 | 8 | @GET("random") 9 | Call getData(); 10 | 11 | } 12 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Mon Oct 05 17:14:38 IST 2020 2 | distributionBase=GRADLE_USER_HOME 3 | distributionPath=wrapper/dists 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | distributionUrl=https\://services.gradle.org/distributions/gradle-6.1.1-all.zip 7 | -------------------------------------------------------------------------------- /app/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #183D5D 4 | #092239 5 | #FF8AE2 6 | #93C2DB 7 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/icon_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/java/com/acmvit/libground/LottieActivity.java: -------------------------------------------------------------------------------- 1 | package com.acmvit.libground; 2 | 3 | import android.os.Bundle; 4 | 5 | import androidx.annotation.Nullable; 6 | import androidx.appcompat.app.AppCompatActivity; 7 | 8 | public class LottieActivity extends AppCompatActivity { 9 | 10 | @Override 11 | public void onCreate(@Nullable Bundle savedInstanceState) { 12 | super.onCreate(savedInstanceState); 13 | setContentView(R.layout.activity_lottie); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /app/src/test/java/com/acmvit/libground/ExampleUnitTest.java: -------------------------------------------------------------------------------- 1 | package com.acmvit.libground; 2 | 3 | import org.junit.Test; 4 | 5 | import static org.junit.Assert.*; 6 | 7 | /** 8 | * Example local unit test, which will execute on the development machine (host). 9 | * 10 | * @see Testing documentation 11 | */ 12 | public class ExampleUnitTest { 13 | @Test 14 | public void addition_isCorrect() { 15 | assertEquals(4, 2 + 2); 16 | } 17 | } -------------------------------------------------------------------------------- /app/src/main/java/com/acmvit/libground/Constants.java: -------------------------------------------------------------------------------- 1 | package com.acmvit.libground; 2 | 3 | public final class Constants { 4 | 5 | public static final String SHIMMER = "Shimmer"; 6 | 7 | public static final String LOTTIE = "Lottie"; 8 | 9 | public static final String RETROFIT = "Retrofit"; 10 | 11 | public static final String FAN = "Fast Android Networking"; 12 | 13 | public static final String EXO_PLAYER = "ExoPlayer"; 14 | 15 | public static final String BIOMETRIC = "Biometric Prompt"; 16 | 17 | } 18 | -------------------------------------------------------------------------------- /app/src/main/java/com/acmvit/libground/ShimmerActivity.java: -------------------------------------------------------------------------------- 1 | package com.acmvit.libground; 2 | 3 | import android.os.Bundle; 4 | import androidx.appcompat.app.AppCompatActivity; 5 | 6 | /** 7 | * Implemented the layout per http://facebook.github.io/shimmer-android/ 8 | */ 9 | 10 | public class ShimmerActivity extends AppCompatActivity { 11 | 12 | @Override 13 | protected void onCreate(Bundle savedInstanceState) { 14 | super.onCreate(savedInstanceState); 15 | setContentView(R.layout.activity_shimmer); 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_libraries.xml: -------------------------------------------------------------------------------- 1 | 6 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_about.xml: -------------------------------------------------------------------------------- 1 | 6 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/runConfigurations.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_facebook.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.github/workflows/appbrickie.yml: -------------------------------------------------------------------------------- 1 | name: AppBrickie 2 | 3 | on: 4 | push: 5 | branches: [master] 6 | pull_request: 7 | branches: [master] 8 | 9 | jobs: 10 | build: 11 | runs-on: ubuntu-latest 12 | name: App Brickie 13 | steps: 14 | - uses: actions/checkout@v2 15 | - name: AppBrickie 16 | id: appBrickieBuild 17 | uses: DarthBenro008/app-brickie@v3.0 18 | with: 19 | type: "native" 20 | chatid: "btthljl0jev7q53nbbng" 21 | packagename: "Libground" 22 | - name: Get Automated Result 23 | run: echo "${{ steps.appBrickieBuild.outputs.result }}" 24 | -------------------------------------------------------------------------------- /.github/workflows/ci.yml: -------------------------------------------------------------------------------- 1 | name: libground-build 2 | on: 3 | push: 4 | branches: [ master ] 5 | pull_request: 6 | branches: [ master ] 7 | 8 | jobs: 9 | build: 10 | runs-on: ubuntu-latest 11 | steps: 12 | - uses: actions/checkout@v1 13 | - name: set up JDK 1.8 14 | uses: actions/setup-java@v1 15 | with: 16 | java-version: 1.8 17 | - name: Lint Code 18 | run: bash ./gradlew lint 19 | - name: Build debug APK 20 | run: bash ./gradlew assembleDebug --stacktrace 21 | - name: Upload APK 22 | uses: actions/upload-artifact@v1 23 | with: 24 | name: app 25 | path: app/build/outputs/apk/debug/app-debug.apk 26 | -------------------------------------------------------------------------------- /app/src/main/res/menu/bottom_menu.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 13 | 18 | -------------------------------------------------------------------------------- /app/src/main/java/com/acmvit/libground/retrofit/RetrofitClient.java: -------------------------------------------------------------------------------- 1 | package com.acmvit.libground.retrofit; 2 | 3 | import retrofit2.Retrofit; 4 | import retrofit2.converter.gson.GsonConverterFactory; 5 | 6 | public class RetrofitClient { 7 | private static Retrofit retrofit; 8 | private static final String BASE_URL = "http://api.quotable.io/"; 9 | 10 | private static Retrofit getClient() { 11 | if (retrofit == null) { 12 | retrofit = new Retrofit.Builder() 13 | .baseUrl(BASE_URL) 14 | .addConverterFactory(GsonConverterFactory.create()) 15 | .build(); 16 | } 17 | 18 | return retrofit; 19 | } 20 | 21 | public static ApiEndPoint getService() { 22 | return getClient().create(ApiEndPoint.class); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile -------------------------------------------------------------------------------- /.idea/gradle.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 20 | 21 | -------------------------------------------------------------------------------- /app/src/main/java/com/acmvit/libground/retrofit/ApiResponse.java: -------------------------------------------------------------------------------- 1 | package com.acmvit.libground.retrofit; 2 | 3 | import com.google.gson.annotations.SerializedName; 4 | 5 | import java.util.List; 6 | 7 | public class ApiResponse { 8 | 9 | @SerializedName("author") 10 | private String author; 11 | 12 | @SerializedName("length") 13 | private int length; 14 | 15 | @SerializedName("_id") 16 | private String id; 17 | 18 | @SerializedName("content") 19 | private String content; 20 | 21 | @SerializedName("tags") 22 | private List tags; 23 | 24 | public String getAuthor(){ 25 | return author; 26 | } 27 | 28 | public int getLength(){ 29 | return length; 30 | } 31 | 32 | public String getId(){ 33 | return id; 34 | } 35 | 36 | public String getContent(){ 37 | return content; 38 | } 39 | 40 | public List getTags(){ 41 | return tags; 42 | } 43 | } -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_twitter.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/androidTest/java/com/acmvit/libground/ExampleInstrumentedTest.java: -------------------------------------------------------------------------------- 1 | package com.acmvit.libground; 2 | 3 | import android.content.Context; 4 | 5 | import androidx.test.platform.app.InstrumentationRegistry; 6 | import androidx.test.ext.junit.runners.AndroidJUnit4; 7 | 8 | import org.junit.Test; 9 | import org.junit.runner.RunWith; 10 | 11 | import static org.junit.Assert.*; 12 | 13 | /** 14 | * Instrumented test, which will execute on an Android device. 15 | * 16 | * @see Testing documentation 17 | */ 18 | @RunWith(AndroidJUnit4.class) 19 | public class ExampleInstrumentedTest { 20 | @Test 21 | public void useAppContext() { 22 | // Context of the app under test. 23 | Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext(); 24 | assertEquals("com.benrostudios.libground", appContext.getPackageName()); 25 | } 26 | } -------------------------------------------------------------------------------- /app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 9 | 10 | 19 | 20 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_contributors.xml: -------------------------------------------------------------------------------- 1 | 6 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/java/com/acmvit/libground/MainActivity.java: -------------------------------------------------------------------------------- 1 | package com.acmvit.libground; 2 | 3 | import androidx.appcompat.app.AppCompatActivity; 4 | import androidx.navigation.NavController; 5 | import androidx.navigation.fragment.NavHostFragment; 6 | import androidx.navigation.ui.NavigationUI; 7 | 8 | import android.os.Bundle; 9 | 10 | import com.bumptech.glide.Glide; 11 | import com.google.android.material.bottomnavigation.BottomNavigationView; 12 | 13 | public class MainActivity extends AppCompatActivity { 14 | 15 | @Override 16 | protected void onCreate(Bundle savedInstanceState) { 17 | super.onCreate(savedInstanceState); 18 | setContentView(R.layout.activity_main); 19 | 20 | BottomNavigationView bottomNavigationView = findViewById(R.id.bottomNavigationView); 21 | NavHostFragment navHostFragment = (NavHostFragment) getSupportFragmentManager().findFragmentById(R.id.nav_host_fragment_container); 22 | NavController navController = navHostFragment.getNavController(); 23 | NavigationUI.setupWithNavController(bottomNavigationView, navController); 24 | } 25 | } -------------------------------------------------------------------------------- /app/src/main/res/navigation/bottom_navigation.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 13 | 18 | 23 | 24 | -------------------------------------------------------------------------------- /gradle.properties: -------------------------------------------------------------------------------- 1 | # Project-wide Gradle settings. 2 | # IDE (e.g. Android Studio) users: 3 | # Gradle settings configured through the IDE *will override* 4 | # any settings specified in this file. 5 | # For more details on how to configure your build environment visit 6 | # http://www.gradle.org/docs/current/userguide/build_environment.html 7 | # Specifies the JVM arguments used for the daemon process. 8 | # The setting is particularly useful for tweaking memory settings. 9 | org.gradle.jvmargs=-Xmx2048m 10 | # When configured, Gradle will run in incubating parallel mode. 11 | # This option should only be used with decoupled projects. More details, visit 12 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects 13 | # org.gradle.parallel=true 14 | # AndroidX package structure to make it clearer which packages are bundled with the 15 | # Android operating system, and which are packaged with your app"s APK 16 | # https://developer.android.com/topic/libraries/support-library/androidx-rn 17 | android.useAndroidX=true 18 | # Automatically convert third-party libraries to use AndroidX 19 | android.enableJetifier=true -------------------------------------------------------------------------------- /.idea/jarRepositories.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 9 | 10 | 14 | 15 | 19 | 20 | 24 | 25 | -------------------------------------------------------------------------------- /app/src/main/java/com/acmvit/libground/Contributors.java: -------------------------------------------------------------------------------- 1 | package com.acmvit.libground; 2 | 3 | public class Contributors { 4 | 5 | private String contributorsName, contributorsGithubID, contributorsLinkedInID; 6 | 7 | public Contributors(String contributorsName, String contributorsGithubID, String contributorsLinkedInID) { 8 | this.contributorsName = contributorsName; 9 | this.contributorsGithubID = contributorsGithubID; 10 | this.contributorsLinkedInID = contributorsLinkedInID; 11 | } 12 | 13 | public String getContributorsName() { 14 | return contributorsName; 15 | } 16 | 17 | public void setContributorsName(String contributorsName) { 18 | this.contributorsName = contributorsName; 19 | } 20 | 21 | public String getContributorsGithubID() { 22 | return contributorsGithubID; 23 | } 24 | 25 | public void setContributorsGithubID(String contributorsGithubID) { 26 | this.contributorsGithubID = contributorsGithubID; 27 | } 28 | 29 | public String getContributorsLinkedInID() { 30 | return contributorsLinkedInID; 31 | } 32 | 33 | public void setContributorsLinkedInID(String contributorsLinkedInID) { 34 | this.contributorsLinkedInID = contributorsLinkedInID; 35 | } 36 | } 37 | 38 | -------------------------------------------------------------------------------- /app/src/main/res/layout/library_card_item.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 17 | 18 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 15 | 16 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_linkedin.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 14 | 15 | 18 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_libraries.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 14 | 15 | 25 | 26 | 36 | 37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-v24/ic_launcher_foreground.xml: -------------------------------------------------------------------------------- 1 | 7 | 8 | 9 | 15 | 18 | 21 | 22 | 23 | 24 | 30 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 10 | 11 | 12 | 24 | 25 | 39 | 40 | -------------------------------------------------------------------------------- /app/src/main/java/com/acmvit/libground/ContributionsAdapter.java: -------------------------------------------------------------------------------- 1 | package com.acmvit.libground; 2 | 3 | import android.view.LayoutInflater; 4 | import android.view.View; 5 | import android.view.ViewGroup; 6 | import android.widget.TextView; 7 | 8 | import androidx.annotation.NonNull; 9 | import androidx.recyclerview.widget.RecyclerView; 10 | 11 | import java.util.ArrayList; 12 | 13 | public class ContributionsAdapter extends RecyclerView.Adapter { 14 | 15 | private ArrayList contributors; 16 | 17 | public ContributionsAdapter(ArrayList contributors) { 18 | this.contributors = contributors; 19 | } 20 | 21 | @NonNull 22 | @Override 23 | public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) { 24 | View view = LayoutInflater.from(viewGroup.getContext()) 25 | .inflate(R.layout.contributors_list_item, viewGroup, false); 26 | return new ViewHolder(view); 27 | } 28 | 29 | @Override 30 | public void onBindViewHolder(@NonNull ViewHolder holder, int position) { 31 | 32 | holder.contributorsName.setText(contributors.get(position).getContributorsName()); 33 | holder.contributorsGithubID.setText(contributors.get(position).getContributorsGithubID()); 34 | holder.contributorsLinkedInID.setText(contributors.get(position).getContributorsLinkedInID()); 35 | 36 | } 37 | 38 | @Override 39 | public int getItemCount() { 40 | return contributors.size(); 41 | } 42 | 43 | public class ViewHolder extends RecyclerView.ViewHolder { 44 | public ViewHolder(@NonNull View itemView) { 45 | super(itemView); 46 | } 47 | 48 | TextView contributorsName = itemView.findViewById(R.id.contributors_name); 49 | TextView contributorsGithubID = itemView.findViewById(R.id.contributors_github); 50 | TextView contributorsLinkedInID = itemView.findViewById(R.id.contributors_linkedin); 51 | 52 | } 53 | 54 | } 55 | -------------------------------------------------------------------------------- /app/src/main/java/com/acmvit/libground/GlideActivity.java: -------------------------------------------------------------------------------- 1 | package com.acmvit.libground; 2 | 3 | import androidx.annotation.Nullable; 4 | import androidx.appcompat.app.AppCompatActivity; 5 | 6 | import android.graphics.drawable.Drawable; 7 | import android.os.Bundle; 8 | import android.view.View; 9 | import android.widget.ImageView; 10 | import android.widget.ProgressBar; 11 | 12 | import com.bumptech.glide.Glide; 13 | import com.bumptech.glide.load.DataSource; 14 | import com.bumptech.glide.load.engine.GlideException; 15 | import com.bumptech.glide.request.RequestListener; 16 | import com.bumptech.glide.request.target.Target; 17 | 18 | public class GlideActivity extends AppCompatActivity { 19 | 20 | private ImageView glideImage; 21 | private String imgLink; 22 | private ProgressBar progressBar; 23 | 24 | @Override 25 | protected void onCreate(Bundle savedInstanceState) { 26 | super.onCreate(savedInstanceState); 27 | setContentView(R.layout.activity_glide); 28 | 29 | glideImage = findViewById(R.id.glide_image); 30 | imgLink = getString(R.string.glide_image_url); 31 | 32 | progressBar = (ProgressBar) findViewById(R.id.progress); 33 | 34 | Glide.with(this) 35 | .load(imgLink) 36 | .listener(new RequestListener() { 37 | @Override 38 | public boolean onLoadFailed(@Nullable GlideException e, Object model, Target target, boolean isFirstResource) { 39 | progressBar.setVisibility(View.GONE); 40 | return false; 41 | } 42 | 43 | @Override 44 | public boolean onResourceReady(Drawable resource, Object model, Target target, DataSource dataSource, boolean isFirstResource) { 45 | progressBar.setVisibility(View.GONE); 46 | return false; 47 | } 48 | }) 49 | .into(glideImage); 50 | 51 | } 52 | } -------------------------------------------------------------------------------- /app/src/main/java/com/acmvit/libground/LibrariesFragment.java: -------------------------------------------------------------------------------- 1 | package com.acmvit.libground; 2 | 3 | import android.os.Bundle; 4 | import android.view.LayoutInflater; 5 | import android.view.View; 6 | import android.view.ViewGroup; 7 | 8 | import androidx.fragment.app.Fragment; 9 | import androidx.recyclerview.widget.RecyclerView; 10 | 11 | import java.util.ArrayList; 12 | 13 | import static com.acmvit.libground.Constants.BIOMETRIC; 14 | import static com.acmvit.libground.Constants.EXO_PLAYER; 15 | import static com.acmvit.libground.Constants.FAN; 16 | import static com.acmvit.libground.Constants.LOTTIE; 17 | import static com.acmvit.libground.Constants.RETROFIT; 18 | import static com.acmvit.libground.Constants.SHIMMER; 19 | 20 | 21 | public class LibrariesFragment extends Fragment { 22 | ArrayList arrayList = new ArrayList<>(); 23 | 24 | public LibrariesFragment() { 25 | // Required empty public constructor 26 | } 27 | 28 | 29 | public static LibrariesFragment newInstance(String param1, String param2) { 30 | LibrariesFragment fragment = new LibrariesFragment(); 31 | return fragment; 32 | } 33 | 34 | 35 | @Override 36 | public View onCreateView(LayoutInflater inflater, ViewGroup container, 37 | Bundle savedInstanceState) { 38 | setLibraries(); 39 | View root = inflater.inflate(R.layout.fragment_libraries, container, false); 40 | RecyclerView libraryRecyclerView = root.findViewById(R.id.library_list); 41 | LibrariesAdapter librariesAdapter = new LibrariesAdapter(arrayList); 42 | libraryRecyclerView.setAdapter(librariesAdapter); 43 | return root; 44 | } 45 | 46 | public void setLibraries() { 47 | arrayList.clear(); 48 | arrayList.add(getString(R.string.glide)); 49 | arrayList.add(SHIMMER); 50 | arrayList.add(LOTTIE); 51 | arrayList.add(RETROFIT); 52 | arrayList.add(FAN); 53 | arrayList.add(EXO_PLAYER); 54 | arrayList.add(BIOMETRIC); 55 | } 56 | } -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_contributors.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 13 | 14 | 28 | 29 | 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /app/src/main/java/com/acmvit/libground/retrofit/RetrofitActivity.java: -------------------------------------------------------------------------------- 1 | package com.acmvit.libground.retrofit; 2 | 3 | import android.os.Bundle; 4 | import android.view.View; 5 | import android.widget.ProgressBar; 6 | import android.widget.TextView; 7 | import android.widget.Toast; 8 | 9 | import androidx.appcompat.app.AppCompatActivity; 10 | 11 | import com.acmvit.libground.R; 12 | 13 | import retrofit2.Call; 14 | import retrofit2.Callback; 15 | import retrofit2.Response; 16 | 17 | public class RetrofitActivity extends AppCompatActivity { 18 | 19 | private TextView tvQuotes; 20 | private TextView tvAuthor; 21 | private ProgressBar progressBar; 22 | 23 | @Override 24 | protected void onCreate(Bundle savedInstanceState) { 25 | super.onCreate(savedInstanceState); 26 | setContentView(R.layout.activity_retrofit); 27 | 28 | tvQuotes = findViewById(R.id.retrofit_quotes); 29 | tvAuthor = findViewById(R.id.retrofit_author); 30 | progressBar = findViewById(R.id.progress); 31 | 32 | getQuotes(); 33 | } 34 | 35 | private void getQuotes() { 36 | Call getData = RetrofitClient.getService().getData(); 37 | getData.enqueue(new Callback() { 38 | @Override 39 | public void onResponse(Call call, Response response) { 40 | if (response.isSuccessful()) { 41 | if (response.body() != null) { 42 | setUpViewWithData(response.body()); 43 | } 44 | } else { 45 | Toast.makeText(RetrofitActivity.this, "Failed get data", Toast.LENGTH_SHORT).show(); 46 | } 47 | } 48 | 49 | @Override 50 | public void onFailure(Call call, Throwable t) { 51 | Toast.makeText(RetrofitActivity.this, "Failed get data", Toast.LENGTH_SHORT).show(); 52 | } 53 | }); 54 | } 55 | 56 | private void setUpViewWithData(ApiResponse response) { 57 | progressBar.setVisibility(View.GONE); 58 | tvQuotes.setText(response.getContent()); 59 | tvAuthor.setText(response.getAuthor()); 60 | } 61 | } -------------------------------------------------------------------------------- /.idea/$CACHE_FILE$: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | Abstraction issuesJava 10 | 11 | 12 | Android 13 | 14 | 15 | Code style issuesJava 16 | 17 | 18 | CorrectnessLintAndroid 19 | 20 | 21 | Inheritance issuesJava 22 | 23 | 24 | Internationalization 25 | 26 | 27 | InternationalizationJava 28 | 29 | 30 | JUnitJava 31 | 32 | 33 | Java 34 | 35 | 36 | Java 9Java language level migration aidsJava 37 | 38 | 39 | Java interop issuesKotlin 40 | 41 | 42 | Java language level migration aidsJava 43 | 44 | 45 | JavadocJava 46 | 47 | 48 | Kotlin 49 | 50 | 51 | LintAndroid 52 | 53 | 54 | Packaging issuesJava 55 | 56 | 57 | PerformanceJava 58 | 59 | 60 | Probable bugsJava 61 | 62 | 63 | SecurityLintAndroid 64 | 65 | 66 | Spelling 67 | 68 | 69 | XML 70 | 71 | 72 | 73 | 74 | 75 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_fingerprint.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/java/com/acmvit/libground/FastAndroidNetworkingActivity.java: -------------------------------------------------------------------------------- 1 | package com.acmvit.libground; 2 | 3 | import android.os.Bundle; 4 | import android.view.View; 5 | import android.widget.ProgressBar; 6 | import android.widget.TextView; 7 | import android.widget.Toast; 8 | 9 | import androidx.appcompat.app.AppCompatActivity; 10 | 11 | import com.androidnetworking.AndroidNetworking; 12 | import com.androidnetworking.common.Priority; 13 | import com.androidnetworking.error.ANError; 14 | import com.androidnetworking.interfaces.JSONObjectRequestListener; 15 | 16 | import org.json.JSONException; 17 | import org.json.JSONObject; 18 | 19 | public class FastAndroidNetworkingActivity extends AppCompatActivity { 20 | 21 | private TextView tvQuotes; 22 | private TextView tvAuthor; 23 | private ProgressBar progressBar; 24 | 25 | @Override 26 | protected void onCreate(Bundle savedInstanceState) { 27 | super.onCreate(savedInstanceState); 28 | setContentView(R.layout.activity_fast_android_networking); 29 | 30 | tvQuotes = findViewById(R.id.fan_quotes); 31 | tvAuthor = findViewById(R.id.fan_author); 32 | progressBar = findViewById(R.id.progress); 33 | 34 | getQuotes(); 35 | } 36 | 37 | private void getQuotes() { 38 | AndroidNetworking.get("http://api.quotable.io/random") 39 | .setTag(this) 40 | .setPriority(Priority.LOW) 41 | .build() 42 | .getAsJSONObject(new JSONObjectRequestListener() { 43 | @Override 44 | public void onResponse(JSONObject response) { 45 | setUpViewWithData(response); 46 | } 47 | 48 | @Override 49 | public void onError(ANError anError) { 50 | Toast.makeText(FastAndroidNetworkingActivity.this, "Failed get data", Toast.LENGTH_SHORT).show(); 51 | } 52 | }); 53 | } 54 | 55 | private void setUpViewWithData(JSONObject response) { 56 | progressBar.setVisibility(View.GONE); 57 | try { 58 | tvQuotes.setText(response.getString("content")); 59 | tvAuthor.setText(response.getString("author")); 60 | } catch (JSONException e) { 61 | e.printStackTrace(); 62 | } 63 | } 64 | } -------------------------------------------------------------------------------- /app/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.application' 2 | 3 | android { 4 | compileSdkVersion 30 5 | buildToolsVersion "30.0.1" 6 | 7 | defaultConfig { 8 | applicationId "com.benrostudios.libground" 9 | minSdkVersion 24 10 | targetSdkVersion 30 11 | versionCode 1 12 | versionName "1.0" 13 | 14 | testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" 15 | } 16 | 17 | buildTypes { 18 | release { 19 | minifyEnabled false 20 | proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' 21 | } 22 | } 23 | 24 | compileOptions { 25 | sourceCompatibility JavaVersion.VERSION_1_8 26 | targetCompatibility JavaVersion.VERSION_1_8 27 | } 28 | } 29 | 30 | dependencies { 31 | implementation fileTree(dir: "libs", include: ["*.jar"]) 32 | implementation 'androidx.appcompat:appcompat:1.2.0' 33 | implementation 'androidx.constraintlayout:constraintlayout:2.0.1' 34 | implementation 'androidx.legacy:legacy-support-v4:1.0.0' 35 | testImplementation 'junit:junit:4.12' 36 | androidTestImplementation 'androidx.test.ext:junit:1.1.2' 37 | androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' 38 | implementation 'com.google.android.material:material:1.2.1' 39 | implementation "androidx.navigation:navigation-dynamic-features-fragment:2.3.0" 40 | implementation 'android.arch.navigation:navigation-fragment:1.0.0' 41 | implementation 'androidx.navigation:navigation-fragment:2.3.0' 42 | implementation 'androidx.navigation:navigation-ui:2.3.0' 43 | 44 | //Glide 45 | implementation 'com.github.bumptech.glide:glide:4.11.0' 46 | annotationProcessor 'com.github.bumptech.glide:compiler:4.11.0' 47 | 48 | //Shimmer 49 | implementation 'com.facebook.shimmer:shimmer:0.5.0' 50 | 51 | //Lottie 52 | implementation 'com.airbnb.android:lottie:3.4.4' 53 | 54 | //Retrofit 55 | implementation 'com.squareup.retrofit2:retrofit:2.9.0' 56 | implementation 'com.squareup.retrofit2:converter-gson:2.9.0' 57 | 58 | //Fast Android Networking 59 | implementation 'com.amitshekhar.android:android-networking:1.0.2' 60 | 61 | //ExoPlayer 62 | implementation 'com.google.android.exoplayer:exoplayer:2.12.0' 63 | 64 | //Biometric 65 | implementation "androidx.biometric:biometric:1.0.1" 66 | } -------------------------------------------------------------------------------- /app/src/main/java/com/acmvit/libground/ContributorsFragment.java: -------------------------------------------------------------------------------- 1 | package com.acmvit.libground; 2 | 3 | import android.os.Bundle; 4 | 5 | import androidx.annotation.NonNull; 6 | import androidx.annotation.Nullable; 7 | import androidx.core.view.ViewCompat; 8 | import androidx.fragment.app.Fragment; 9 | import androidx.recyclerview.widget.LinearLayoutManager; 10 | import androidx.recyclerview.widget.RecyclerView; 11 | 12 | import android.view.LayoutInflater; 13 | import android.view.View; 14 | import android.view.ViewGroup; 15 | 16 | import java.util.ArrayList; 17 | 18 | public class ContributorsFragment extends Fragment { 19 | 20 | ArrayList contributors = new ArrayList<>(); 21 | RecyclerView contributorsRecyclerView; 22 | 23 | public ContributorsFragment() { 24 | // Required empty public constructor 25 | } 26 | 27 | 28 | @Override 29 | public View onCreateView(LayoutInflater inflater, ViewGroup container, 30 | Bundle savedInstanceState) { 31 | // Inflate the layout for this fragment 32 | return inflater.inflate(R.layout.fragment_contributors, container, false); 33 | } 34 | 35 | @Override 36 | public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { 37 | super.onViewCreated(view, savedInstanceState); 38 | setContributors(); 39 | contributorsRecyclerView = view.findViewById(R.id.contributors_rv); 40 | LinearLayoutManager contributionsLinearLayoutManager = new LinearLayoutManager(getContext()); 41 | contributionsLinearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL); 42 | contributorsRecyclerView.setLayoutManager(contributionsLinearLayoutManager); 43 | contributorsRecyclerView.setAdapter(new ContributionsAdapter(contributors)); 44 | ViewCompat.setNestedScrollingEnabled(contributorsRecyclerView, false); 45 | } 46 | 47 | public void setContributors() { 48 | contributors.add(new Contributors("Brabant Nicolas", "nbrabant", "nicolas-brabant-9210b531")); 49 | contributors.add(new Contributors("Nowele Rechka", "https://github.com/Nowele", "https://www.linkedin.com/in/nowele/")); 50 | contributors.add(new Contributors("Nabilla Sabbaha", "nabillasab", "nabillasabbaha")); 51 | contributors.add(new Contributors("Alvin Tandiardi", "alvintan05", "alvin-tandiardi")); 52 | contributors.add(new Contributors("Contributor Name", "Github ID", "LinkedIn ID")); 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /gradlew.bat: -------------------------------------------------------------------------------- 1 | @if "%DEBUG%" == "" @echo off 2 | @rem ########################################################################## 3 | @rem 4 | @rem Gradle startup script for Windows 5 | @rem 6 | @rem ########################################################################## 7 | 8 | @rem Set local scope for the variables with windows NT shell 9 | if "%OS%"=="Windows_NT" setlocal 10 | 11 | set DIRNAME=%~dp0 12 | if "%DIRNAME%" == "" set DIRNAME=. 13 | set APP_BASE_NAME=%~n0 14 | set APP_HOME=%DIRNAME% 15 | 16 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 17 | set DEFAULT_JVM_OPTS= 18 | 19 | @rem Find java.exe 20 | if defined JAVA_HOME goto findJavaFromJavaHome 21 | 22 | set JAVA_EXE=java.exe 23 | %JAVA_EXE% -version >NUL 2>&1 24 | if "%ERRORLEVEL%" == "0" goto init 25 | 26 | echo. 27 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 28 | echo. 29 | echo Please set the JAVA_HOME variable in your environment to match the 30 | echo location of your Java installation. 31 | 32 | goto fail 33 | 34 | :findJavaFromJavaHome 35 | set JAVA_HOME=%JAVA_HOME:"=% 36 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe 37 | 38 | if exist "%JAVA_EXE%" goto init 39 | 40 | echo. 41 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 42 | echo. 43 | echo Please set the JAVA_HOME variable in your environment to match the 44 | echo location of your Java installation. 45 | 46 | goto fail 47 | 48 | :init 49 | @rem Get command-line arguments, handling Windows variants 50 | 51 | if not "%OS%" == "Windows_NT" goto win9xME_args 52 | 53 | :win9xME_args 54 | @rem Slurp the command line arguments. 55 | set CMD_LINE_ARGS= 56 | set _SKIP=2 57 | 58 | :win9xME_args_slurp 59 | if "x%~1" == "x" goto execute 60 | 61 | set CMD_LINE_ARGS=%* 62 | 63 | :execute 64 | @rem Setup the command line 65 | 66 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar 67 | 68 | @rem Execute Gradle 69 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% 70 | 71 | :end 72 | @rem End local scope for the variables with windows NT shell 73 | if "%ERRORLEVEL%"=="0" goto mainEnd 74 | 75 | :fail 76 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of 77 | rem the _cmd.exe /c_ return code! 78 | if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 79 | exit /b 1 80 | 81 | :mainEnd 82 | if "%OS%"=="Windows_NT" endlocal 83 | 84 | :omega 85 | -------------------------------------------------------------------------------- /app/src/main/java/com/acmvit/libground/ExoPlayerActivity.java: -------------------------------------------------------------------------------- 1 | package com.acmvit.libground; 2 | 3 | import androidx.appcompat.app.AppCompatActivity; 4 | 5 | import android.annotation.SuppressLint; 6 | import android.os.Bundle; 7 | import android.view.View; 8 | 9 | import com.google.android.exoplayer2.MediaItem; 10 | import com.google.android.exoplayer2.SimpleExoPlayer; 11 | import com.google.android.exoplayer2.ui.PlayerView; 12 | import com.google.android.exoplayer2.util.Util; 13 | 14 | public class ExoPlayerActivity extends AppCompatActivity { 15 | 16 | private PlayerView playerView; 17 | private SimpleExoPlayer player; 18 | 19 | private boolean playerWhenReady = true; 20 | private int currentWindow = 0; 21 | private long playbackPosition = 0; 22 | 23 | @Override 24 | protected void onCreate(Bundle savedInstanceState) { 25 | super.onCreate(savedInstanceState); 26 | setContentView(R.layout.activity_exo_player); 27 | 28 | playerView = findViewById(R.id.exo_player); 29 | } 30 | 31 | private void initializePlayer() { 32 | player = new SimpleExoPlayer.Builder(this).build(); 33 | playerView.setPlayer(player); 34 | 35 | MediaItem mediaItem = MediaItem.fromUri(getString(R.string.media_url_mp4)); 36 | player.setMediaItem(mediaItem); 37 | 38 | player.setPlayWhenReady(playerWhenReady); 39 | player.seekTo(currentWindow, playbackPosition); 40 | player.prepare(); 41 | } 42 | 43 | private void releasePlayer() { 44 | if (player != null) { 45 | playerWhenReady = player.getPlayWhenReady(); 46 | playbackPosition = player.getCurrentPosition(); 47 | currentWindow = player.getCurrentWindowIndex(); 48 | player.release(); 49 | player = null; 50 | } 51 | } 52 | 53 | @Override 54 | protected void onStart() { 55 | super.onStart(); 56 | if (Util.SDK_INT >= 24) { 57 | initializePlayer(); 58 | } 59 | } 60 | 61 | @Override 62 | protected void onResume() { 63 | super.onResume(); 64 | if (Util.SDK_INT < 24 || player == null) { 65 | initializePlayer(); 66 | } 67 | } 68 | 69 | @Override 70 | protected void onPause() { 71 | super.onPause(); 72 | if (Util.SDK_INT < 24) { 73 | releasePlayer(); 74 | } 75 | } 76 | 77 | @Override 78 | protected void onStop() { 79 | super.onStop(); 80 | if (Util.SDK_INT >= 24) { 81 | releasePlayer(); 82 | } 83 | } 84 | 85 | } -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_instagram.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/java/com/acmvit/libground/AboutFragment.java: -------------------------------------------------------------------------------- 1 | package com.acmvit.libground; 2 | 3 | 4 | import android.content.Intent; 5 | import android.net.Uri; 6 | import android.os.Bundle; 7 | 8 | import androidx.fragment.app.Fragment; 9 | 10 | import android.view.LayoutInflater; 11 | import android.view.View; 12 | import android.view.ViewGroup; 13 | 14 | public class AboutFragment extends Fragment { 15 | 16 | public AboutFragment() { 17 | // Required empty public constructor 18 | } 19 | 20 | public static AboutFragment newInstance(String param1, String param2) { 21 | AboutFragment fragment = new AboutFragment(); 22 | return fragment; 23 | } 24 | 25 | @Override 26 | public View onCreateView(LayoutInflater inflater, ViewGroup container, 27 | Bundle savedInstanceState) { 28 | View root = inflater.inflate(R.layout.fragment_about, container, false); 29 | root.findViewById(R.id.insta_link).setOnClickListener(new View.OnClickListener() { 30 | @Override 31 | public void onClick(View view) { 32 | String url = getString(R.string.url_acmvit_instagram); 33 | Intent i = new Intent(Intent.ACTION_VIEW); 34 | i.setData(Uri.parse(url)); 35 | startActivity(i); 36 | } 37 | }); 38 | root.findViewById(R.id.facebook).setOnClickListener(new View.OnClickListener() { 39 | @Override 40 | public void onClick(View view) { 41 | String url = getString(R.string.url_acmvit_facebook); 42 | Intent i = new Intent(Intent.ACTION_VIEW); 43 | i.setData(Uri.parse(url)); 44 | startActivity(i); 45 | } 46 | }); 47 | root.findViewById(R.id.insta_link).setOnClickListener(new View.OnClickListener() { 48 | @Override 49 | public void onClick(View view) { 50 | String url = getString(R.string.url_acmvit_instagram); 51 | Intent i = new Intent(Intent.ACTION_VIEW); 52 | i.setData(Uri.parse(url)); 53 | startActivity(i); 54 | } 55 | }); 56 | root.findViewById(R.id.twitter).setOnClickListener(new View.OnClickListener() { 57 | @Override 58 | public void onClick(View view) { 59 | String url = getString(R.string.url_acmvit_twitter); 60 | Intent i = new Intent(Intent.ACTION_VIEW); 61 | i.setData(Uri.parse(url)); 62 | startActivity(i); 63 | } 64 | }); 65 | root.findViewById(R.id.linkedIn).setOnClickListener(new View.OnClickListener() { 66 | @Override 67 | public void onClick(View view) { 68 | String url = getString(R.string.url_acmvit_linkedin); 69 | Intent i = new Intent(Intent.ACTION_VIEW); 70 | i.setData(Uri.parse(url)); 71 | startActivity(i); 72 | } 73 | }); 74 | return root; 75 | 76 | } 77 | } -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_linkedin_2.xml: -------------------------------------------------------------------------------- 1 | 7 | 9 | 10 | 16 | 17 | 18 | 19 | 20 | 21 | 23 | 24 | 26 | 27 | 29 | 30 | 32 | 33 | 35 | 36 | 39 | 42 | 45 | 46 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

Kicking Off Hacktoberfest with ACM-VIT!

2 |

3 | 4 |

5 | 6 |

Libground

7 | 8 |

9 | Android library playground of awesome libraries! 10 |

11 | 12 |

13 | 14 | made-by-acm 15 | 16 | license 17 | license 18 |

19 | 20 | 21 | --- 22 | 23 | Want to see a short example of some awesome android libraries? Do you want to see how the library functions in an app? This is your playground then! Libground! 24 | 25 | 26 | --- 27 | 28 | --- 29 | ## Submitting a Pull Request 30 | 31 | * Fork the repository by clicking the fork button on top right corner of the page 32 | * Clone the target repository. To clone, click on the clone button and copy the https address. Then run 33 |
git clone https://github.com/ACM-VIT/libground
34 | * Go to the cloned directory by running 35 |
cd libground
36 | * Create a new branch. Use 37 |
 git checkout -b [YOUR-BRANCH-NAME]
38 | * Make your changes to the code. Add changes to your branch by using 39 |
git add .
40 | * Commit the chanes by executing 41 |
git commit -m "my-cool-feature"
42 | * Push to remote. To do this, run 43 |
git push origin [YOUR-BRANCH-NAME]
44 | * Create a pull request. Go to the target repository and click on the "Compare & pull request" button. **Make sure your PR description mentions which issues you're solving.** 45 | 46 | * Wait for your request to be accepted. 47 | 48 | --- 49 | ## Guidelines for Pull Request 50 | 51 | 52 | * Avoid pull requests that : 53 | * are automated or scripted 54 | * that are plagarized from someone else's branch 55 | * Do not spam 56 | * Project maintainer's decision on validity of PR is final. 57 | 58 | For additional guidelines, refer to [participation rules](https://hacktoberfest.digitalocean.com/details#rules) 59 | 60 | --- 61 | 62 | ## Before sending your PR 63 | 64 | - Make sure you use only stable library versions. (Alpha, Release candidate libraries must not be used) 65 | - Make sure you lint your code. 66 | - Make sure to add your contributor card in the Contributor Page of the app! 67 | 68 | --- 69 | ## Overview 70 | 71 | Librground is your friendly playground that hosts exmaples of various awesome android libraries! 72 | 73 | It contains a short example, provides preview of how the app would look in your app. 74 | 75 | Compile the app and give it a shot! 76 | 77 | --- 78 | ## Usage 79 | 80 | 81 | Lets get started! 82 | ```console 83 | git remote add origin https://github.com/ACM-VIT/libground 84 | git pull origin master 85 | ``` 86 | 87 | --- 88 | ## Contributors 89 | 90 | 91 | 92 | -------------------------------------------------------------------------------- /app/src/main/java/com/acmvit/libground/LibrariesAdapter.java: -------------------------------------------------------------------------------- 1 | package com.acmvit.libground; 2 | 3 | import android.content.Context; 4 | import android.content.Intent; 5 | import android.view.LayoutInflater; 6 | import android.view.View; 7 | import android.view.ViewGroup; 8 | import android.widget.TextView; 9 | 10 | import androidx.annotation.NonNull; 11 | import androidx.recyclerview.widget.RecyclerView; 12 | 13 | import com.acmvit.libground.retrofit.RetrofitActivity; 14 | import com.google.android.material.card.MaterialCardView; 15 | 16 | import java.util.ArrayList; 17 | 18 | import static com.acmvit.libground.Constants.BIOMETRIC; 19 | import static com.acmvit.libground.Constants.EXO_PLAYER; 20 | import static com.acmvit.libground.Constants.FAN; 21 | import static com.acmvit.libground.Constants.LOTTIE; 22 | import static com.acmvit.libground.Constants.RETROFIT; 23 | import static com.acmvit.libground.Constants.SHIMMER; 24 | 25 | public class LibrariesAdapter extends RecyclerView.Adapter { 26 | ArrayList libraryArrayList; 27 | 28 | public LibrariesAdapter(ArrayList libraryArrayList) { 29 | this.libraryArrayList = libraryArrayList; 30 | } 31 | 32 | @NonNull 33 | @Override 34 | public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { 35 | View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.library_card_item, parent, false); 36 | return new ViewHolder(view); 37 | } 38 | 39 | @Override 40 | public void onBindViewHolder(@NonNull ViewHolder holder, final int position) { 41 | holder.libraryName.setText(libraryArrayList.get(position)); 42 | final Context context = holder.itemView.getContext(); 43 | 44 | holder.libraryCard.setOnClickListener(new View.OnClickListener() { 45 | @Override 46 | public void onClick(View view) { 47 | goToLibraryActivity(context, position); 48 | } 49 | }); 50 | } 51 | 52 | @Override 53 | public int getItemCount() { 54 | return libraryArrayList.size(); 55 | } 56 | 57 | public void goToLibraryActivity(Context context, int position) { 58 | final Intent intent; 59 | switch (libraryArrayList.get(position)) { 60 | case "Glide": 61 | intent = new Intent(context, GlideActivity.class); 62 | break; 63 | case SHIMMER: 64 | intent = new Intent(context, ShimmerActivity.class); 65 | break; 66 | case LOTTIE: 67 | intent = new Intent(context, LottieActivity.class); 68 | break; 69 | case RETROFIT: 70 | intent = new Intent(context, RetrofitActivity.class); 71 | break; 72 | case FAN: 73 | intent = new Intent(context, FastAndroidNetworkingActivity.class); 74 | break; 75 | case EXO_PLAYER: 76 | intent = new Intent(context, ExoPlayerActivity.class); 77 | break; 78 | case BIOMETRIC: 79 | intent = new Intent(context, BiometricActivity.class); 80 | break; 81 | default: 82 | intent = new Intent(context, MainActivity.class); 83 | } 84 | context.startActivity(intent); 85 | 86 | } 87 | 88 | 89 | public class ViewHolder extends RecyclerView.ViewHolder { 90 | TextView libraryName; 91 | MaterialCardView libraryCard; 92 | 93 | public ViewHolder(View view) { 94 | super(view); 95 | libraryName = view.findViewById(R.id.library_name); 96 | libraryCard = view.findViewById(R.id.library_card); 97 | 98 | } 99 | } 100 | } 101 | -------------------------------------------------------------------------------- /app/src/main/java/com/acmvit/libground/BiometricActivity.java: -------------------------------------------------------------------------------- 1 | package com.acmvit.libground; 2 | 3 | import android.os.Bundle; 4 | import android.view.View; 5 | import android.widget.Button; 6 | import android.widget.TextView; 7 | import android.widget.Toast; 8 | 9 | import androidx.annotation.NonNull; 10 | import androidx.appcompat.app.AppCompatActivity; 11 | import androidx.biometric.BiometricManager; 12 | import androidx.biometric.BiometricPrompt; 13 | import androidx.core.content.ContextCompat; 14 | 15 | import java.util.concurrent.Executor; 16 | 17 | public class BiometricActivity extends AppCompatActivity implements View.OnClickListener { 18 | 19 | private TextView tvStatus; 20 | private Button btnBiometric; 21 | 22 | @Override 23 | protected void onCreate(Bundle savedInstanceState) { 24 | super.onCreate(savedInstanceState); 25 | setContentView(R.layout.activity_biometric); 26 | 27 | tvStatus = findViewById(R.id.tv_status); 28 | btnBiometric = findViewById(R.id.btn_biometric); 29 | 30 | checkAvailability(); 31 | 32 | btnBiometric.setOnClickListener(this); 33 | } 34 | 35 | private void checkAvailability() { 36 | BiometricManager biometricManager = BiometricManager.from(this); 37 | switch (biometricManager.canAuthenticate()) { 38 | case BiometricManager.BIOMETRIC_SUCCESS: // device have fingerprint sensor 39 | tvStatus.setText(getResources().getString(R.string.biometric_available)); 40 | break; 41 | case BiometricManager.BIOMETRIC_ERROR_NO_HARDWARE: // device don't have fingerprint sensor 42 | tvStatus.setText(getResources().getString(R.string.biometric_no_hardware)); 43 | btnBiometric.setVisibility(View.GONE); 44 | break; 45 | case BiometricManager.BIOMETRIC_ERROR_HW_UNAVAILABLE: 46 | tvStatus.setText(getResources().getString(R.string.biometric_unavailable)); 47 | btnBiometric.setVisibility(View.GONE); 48 | break; 49 | case BiometricManager.BIOMETRIC_ERROR_NONE_ENROLLED: 50 | tvStatus.setText(getResources().getString(R.string.biometric_none_enrolled)); 51 | btnBiometric.setVisibility(View.GONE); 52 | break; 53 | } 54 | } 55 | 56 | private void showBiometricPrompt() { 57 | Executor executor = ContextCompat.getMainExecutor(this); 58 | BiometricPrompt biometricPrompt = new BiometricPrompt(BiometricActivity.this, executor, new BiometricPrompt.AuthenticationCallback() { 59 | @Override 60 | public void onAuthenticationError(int errorCode, @NonNull CharSequence errString) { 61 | super.onAuthenticationError(errorCode, errString); 62 | Toast.makeText(BiometricActivity.this, errString, Toast.LENGTH_SHORT).show(); 63 | } 64 | 65 | @Override 66 | public void onAuthenticationSucceeded(@NonNull BiometricPrompt.AuthenticationResult result) { 67 | super.onAuthenticationSucceeded(result); 68 | Toast.makeText(BiometricActivity.this, "Success!", Toast.LENGTH_SHORT).show(); 69 | } 70 | 71 | @Override 72 | public void onAuthenticationFailed() { 73 | super.onAuthenticationFailed(); 74 | } 75 | }); 76 | 77 | BiometricPrompt.PromptInfo promptInfo = new BiometricPrompt.PromptInfo.Builder() 78 | .setTitle("This is title") 79 | .setSubtitle("This is subtitle") 80 | .setDescription("This is description") 81 | .setNegativeButtonText("Cancel") 82 | .build(); 83 | 84 | biometricPrompt.authenticate(promptInfo); 85 | } 86 | 87 | @Override 88 | public void onClick(View view) { 89 | if (view.getId() == R.id.btn_biometric) { 90 | showBiometricPrompt(); 91 | } 92 | } 93 | } -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_shimmer.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 14 | 15 | 22 | 23 | 36 | 37 | 51 | 52 | 65 | 66 | 80 | 81 | 82 | 83 | 84 | 85 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_lottie.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 16 | 17 | 30 | 31 | 45 | 46 | 59 | 60 | 74 | 75 | 76 | 86 | 87 | 88 | 89 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_exo_player.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 16 | 17 | 30 | 31 | 45 | 46 | 59 | 60 | 74 | 75 | 87 | 88 | 89 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_github.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 12 | 15 | 18 | 21 | 24 | 27 | 30 | 31 | -------------------------------------------------------------------------------- /.idea/codeStyles/Project.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 11 | 12 | 13 | 14 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | xmlns:android 23 | 24 | ^$ 25 | 26 | 27 | 28 |
29 |
30 | 31 | 32 | 33 | xmlns:.* 34 | 35 | ^$ 36 | 37 | 38 | BY_NAME 39 | 40 |
41 |
42 | 43 | 44 | 45 | .*:id 46 | 47 | http://schemas.android.com/apk/res/android 48 | 49 | 50 | 51 |
52 |
53 | 54 | 55 | 56 | .*:name 57 | 58 | http://schemas.android.com/apk/res/android 59 | 60 | 61 | 62 |
63 |
64 | 65 | 66 | 67 | name 68 | 69 | ^$ 70 | 71 | 72 | 73 |
74 |
75 | 76 | 77 | 78 | style 79 | 80 | ^$ 81 | 82 | 83 | 84 |
85 |
86 | 87 | 88 | 89 | .* 90 | 91 | ^$ 92 | 93 | 94 | BY_NAME 95 | 96 |
97 |
98 | 99 | 100 | 101 | .* 102 | 103 | http://schemas.android.com/apk/res/android 104 | 105 | 106 | ANDROID_ATTRIBUTE_ORDER 107 | 108 |
109 |
110 | 111 | 112 | 113 | .* 114 | 115 | .* 116 | 117 | 118 | BY_NAME 119 | 120 |
121 |
122 |
123 |
124 |
125 |
-------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_about.xml: -------------------------------------------------------------------------------- 1 | 8 | 9 | 10 | 18 | 19 | 32 | 33 | 47 | 48 | 59 | 60 | 71 | 72 | 83 | 84 | 85 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_glide.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 15 | 16 | 29 | 30 | 44 | 45 | 58 | 59 | 73 | 74 | 84 | 94 | 95 | 96 | 97 | -------------------------------------------------------------------------------- /app/src/main/res/layout/contributors_list_item.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 17 | 18 | 24 | 25 | 26 | 34 | 35 | 41 | 42 | 46 | 47 | 55 | 56 | 60 | 61 | 68 | 69 | 70 | 71 | 72 | 73 | 79 | 80 | 84 | 85 | 92 | 93 | 97 | 98 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_biometric.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 16 | 17 | 30 | 31 | 45 | 46 | 59 | 60 | 74 | 75 | 90 | 91 | 109 | 110 | 111 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_fast_android_networking.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 16 | 17 | 30 | 31 | 45 | 46 | 59 | 60 | 74 | 75 | 91 | 92 | 106 | 107 | 116 | 117 | 118 | 119 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_retrofit.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 16 | 17 | 30 | 31 | 45 | 46 | 59 | 60 | 74 | 75 | 91 | 92 | 106 | 107 | 116 | 117 | 118 | 119 | -------------------------------------------------------------------------------- /gradlew: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | ############################################################################## 4 | ## 5 | ## Gradle start up script for UN*X 6 | ## 7 | ############################################################################## 8 | 9 | # Attempt to set APP_HOME 10 | # Resolve links: $0 may be a link 11 | PRG="$0" 12 | # Need this for relative symlinks. 13 | while [ -h "$PRG" ] ; do 14 | ls=`ls -ld "$PRG"` 15 | link=`expr "$ls" : '.*-> \(.*\)$'` 16 | if expr "$link" : '/.*' > /dev/null; then 17 | PRG="$link" 18 | else 19 | PRG=`dirname "$PRG"`"/$link" 20 | fi 21 | done 22 | SAVED="`pwd`" 23 | cd "`dirname \"$PRG\"`/" >/dev/null 24 | APP_HOME="`pwd -P`" 25 | cd "$SAVED" >/dev/null 26 | 27 | APP_NAME="Gradle" 28 | APP_BASE_NAME=`basename "$0"` 29 | 30 | # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 31 | DEFAULT_JVM_OPTS="" 32 | 33 | # Use the maximum available, or set MAX_FD != -1 to use that value. 34 | MAX_FD="maximum" 35 | 36 | warn () { 37 | echo "$*" 38 | } 39 | 40 | die () { 41 | echo 42 | echo "$*" 43 | echo 44 | exit 1 45 | } 46 | 47 | # OS specific support (must be 'true' or 'false'). 48 | cygwin=false 49 | msys=false 50 | darwin=false 51 | nonstop=false 52 | case "`uname`" in 53 | CYGWIN* ) 54 | cygwin=true 55 | ;; 56 | Darwin* ) 57 | darwin=true 58 | ;; 59 | MINGW* ) 60 | msys=true 61 | ;; 62 | NONSTOP* ) 63 | nonstop=true 64 | ;; 65 | esac 66 | 67 | CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar 68 | 69 | # Determine the Java command to use to start the JVM. 70 | if [ -n "$JAVA_HOME" ] ; then 71 | if [ -x "$JAVA_HOME/jre/sh/java" ] ; then 72 | # IBM's JDK on AIX uses strange locations for the executables 73 | JAVACMD="$JAVA_HOME/jre/sh/java" 74 | else 75 | JAVACMD="$JAVA_HOME/bin/java" 76 | fi 77 | if [ ! -x "$JAVACMD" ] ; then 78 | die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME 79 | 80 | Please set the JAVA_HOME variable in your environment to match the 81 | location of your Java installation." 82 | fi 83 | else 84 | JAVACMD="java" 85 | which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 86 | 87 | Please set the JAVA_HOME variable in your environment to match the 88 | location of your Java installation." 89 | fi 90 | 91 | # Increase the maximum file descriptors if we can. 92 | if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then 93 | MAX_FD_LIMIT=`ulimit -H -n` 94 | if [ $? -eq 0 ] ; then 95 | if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then 96 | MAX_FD="$MAX_FD_LIMIT" 97 | fi 98 | ulimit -n $MAX_FD 99 | if [ $? -ne 0 ] ; then 100 | warn "Could not set maximum file descriptor limit: $MAX_FD" 101 | fi 102 | else 103 | warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" 104 | fi 105 | fi 106 | 107 | # For Darwin, add options to specify how the application appears in the dock 108 | if $darwin; then 109 | GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" 110 | fi 111 | 112 | # For Cygwin, switch paths to Windows format before running java 113 | if $cygwin ; then 114 | APP_HOME=`cygpath --path --mixed "$APP_HOME"` 115 | CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` 116 | JAVACMD=`cygpath --unix "$JAVACMD"` 117 | 118 | # We build the pattern for arguments to be converted via cygpath 119 | ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` 120 | SEP="" 121 | for dir in $ROOTDIRSRAW ; do 122 | ROOTDIRS="$ROOTDIRS$SEP$dir" 123 | SEP="|" 124 | done 125 | OURCYGPATTERN="(^($ROOTDIRS))" 126 | # Add a user-defined pattern to the cygpath arguments 127 | if [ "$GRADLE_CYGPATTERN" != "" ] ; then 128 | OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" 129 | fi 130 | # Now convert the arguments - kludge to limit ourselves to /bin/sh 131 | i=0 132 | for arg in "$@" ; do 133 | CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` 134 | CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option 135 | 136 | if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition 137 | eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` 138 | else 139 | eval `echo args$i`="\"$arg\"" 140 | fi 141 | i=$((i+1)) 142 | done 143 | case $i in 144 | (0) set -- ;; 145 | (1) set -- "$args0" ;; 146 | (2) set -- "$args0" "$args1" ;; 147 | (3) set -- "$args0" "$args1" "$args2" ;; 148 | (4) set -- "$args0" "$args1" "$args2" "$args3" ;; 149 | (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; 150 | (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; 151 | (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; 152 | (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; 153 | (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; 154 | esac 155 | fi 156 | 157 | # Escape application args 158 | save () { 159 | for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done 160 | echo " " 161 | } 162 | APP_ARGS=$(save "$@") 163 | 164 | # Collect all arguments for the java command, following the shell quoting and substitution rules 165 | eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" 166 | 167 | # by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong 168 | if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then 169 | cd "$(dirname "$0")" 170 | fi 171 | 172 | exec "$JAVACMD" "$@" 173 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_launcher_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 10 | 15 | 20 | 25 | 30 | 35 | 40 | 45 | 50 | 55 | 60 | 65 | 70 | 75 | 80 | 85 | 90 | 95 | 100 | 105 | 110 | 115 | 120 | 125 | 130 | 135 | 140 | 145 | 150 | 155 | 160 | 165 | 170 | 171 | -------------------------------------------------------------------------------- /app/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | Libground 3 | 4 | Glide 5 | Implementation 6 | Contributor Name 7 | Github ID 8 | LinkedIn ID 9 | About ACM-VIT Fragment 10 | About Us 11 | Contributors 12 | Libraries 13 | Libraries Fragment 14 | Glide supports fetching, decoding, and displaying video stills, images, and animated GIFs. It\'s primary focus is on making scrolling any kind of a list of images as smooth and fast as possible 15 | Here is an example which depicts the usage of Glide for fetching and displaying the images from the Internet 16 | ACM-VIT, one of the most reputed and distinguished technical chapter in VIT, Vellore has been working with vision and determination since it’s inception in 2009, with the aspirations of advancement of computer science as a science and a profession. We are not just an organization, we are a family, united by one cause, working towards making technology more accessible much like our parent organization, ACM.\n\nACM-VIT has been working on projects related to graphic designing, web development, machine learning and app development and has been organizing events and workshop for the same. Apart from this, ACM-VIT also boasts of its own research wing, the only chapter in VIT to have that.\n\nTechnology is their cause, objective, vision and mission. Ask why? Look at our motto, “Because Technology Matters”. 17 | https://www.instagram.com/acmvit/ 18 | https://www.facebook.com/ACM.VITU 19 | https://twitter.com/ACM_VIT 20 | https://www.linkedin.com/company/acm-vit/ 21 | https://i.pcmag.com/imagery/lineups/01peUn6ncZ6gL0dEpO6rsW0-1.1569492716.fit_lim.size_1200x630.jpg 22 | 23 | 24 | Shimmer 25 | 26 | Shimmer is an Android library that provides an easy way to add a shimmer effect to any view in your Android app. It is useful as an unobtrusive loading indicator that was originally developed for Facebook Home. 27 | 28 | 29 | Shimmer for Android is implemented as a layout, which means that you can simply nest any view inside a ShimmerFrameLayout tag, and call to start the animation from your code. That\'s all that is required. The layout will use the values you specify either on the tag (using custom attributes) or programmatically in your code, and generate an animation on the fly. 30 | 31 | 32 | 33 | Lottie 34 | Lottie is a mobile library for Android and iOS that parses Adobe After Effects animations exported as json with Bodymovin and renders them natively on mobile. With Lottie, designers can create and ship beautiful animations without an engineer painstakingly recreating it by hand. 35 | Here is example the usage of lottie animation with json. Just put LottieAnimationView in xml and declare the json file, lottie animation is ready to show! \nLottie animation source: https://lottiefiles.com/35139-claping-animation 36 | 37 | 38 | Retrofit 39 | Retrofit is a type-safe REST client for Android, Java and Kotlin developed by Square. The library provides a powerful framework for authenticating and interacting with APIs and sending network requests with OkHttp. 40 | Here is example of network request to get data from api.quotable.io. Retrofit library makes downloading JSON or XML data from a web API fairly straightforward. Once the data is downloaded then it is parsed into a Plain Old Java Object (POJO) which must be defined for each "resource" in the response. 41 | 42 | 43 | Fast Android Networking 44 | Fast Android Networking Library is a powerful library for doing any type of networking in Android applications which is made on top of OkHttp Networking Layer. Fast Android Networking Library takes care of each and everything. So you don\'t have to do anything, just make request and listen for the response. 45 | Here is example of network request to get data from api.quotable.io. FAN library will handle the request and give us a response with multiple options. There are JSONArray, JSONObject, Parsed Object, Parsed Object List. In this case, we use JSONObject as a response. 46 | 47 | 48 | https://storage.googleapis.com/exoplayer-test-media-0/BigBuckBunny_320x180.mp4 49 | ExoPlayer 50 | ExoPlayer is an application level media player for Android. It provides an alternative to Android’s MediaPlayer API for playing audio and video both locally and over the Internet. 51 | Here is an example of the usage of ExoPlayer with video from internet. 52 | 53 | 54 | Biometric Prompt 55 | Biometric authentication is an extension of fingerprint authentication. A biometric API is far more advanced and straightforward to integrate when compared to its predecessor. 56 | Here is an example of the usage of Biometric Prompt using Fingerprint sensor. 57 | You can use the fingerprint sensor 58 | Your device don\'t have fingerprint sensor 59 | The fingerprint sensor is currently unavailable 60 | Your device don\'t have any fingerprint saved, please check your security settings 61 | Open Biometric Dialog 62 | -------------------------------------------------------------------------------- /app/src/main/res/raw/claping_hands.json: -------------------------------------------------------------------------------- 1 | {"v":"5.5.7","meta":{"g":"LottieFiles AE 0.1.20","a":"","k":"","d":"","tc":""},"fr":29.9700012207031,"ip":0,"op":30.0000012219251,"w":240,"h":120,"nm":"spot_celebration","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"hand-1 Outlines","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.389,"y":0},"t":0,"s":[110.657,60.209,0],"to":[0.724,0,0],"ti":[0,0,0]},{"i":{"x":0.623,"y":1},"o":{"x":0.167,"y":0.167},"t":2.024,"s":[115,60.209,0],"to":[0,0,0],"ti":[0.724,0,0]},{"i":{"x":0,"y":0},"o":{"x":0.333,"y":0.333},"t":4.048,"s":[110.657,60.209,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":6.476,"s":[110.657,60.209,0],"to":[0.724,0,0],"ti":[0,0,0]},{"i":{"x":0.665,"y":1},"o":{"x":0.167,"y":0.167},"t":8.5,"s":[115,60.209,0],"to":[0,0,0],"ti":[0.724,0,0]},{"i":{"x":0,"y":0},"o":{"x":0.333,"y":0.333},"t":10.524,"s":[110.657,60.209,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":12.953,"s":[110.657,60.209,0],"to":[0.724,0,0],"ti":[0,0,0]},{"i":{"x":0.673,"y":1},"o":{"x":0.167,"y":0.167},"t":14.976,"s":[115,60.209,0],"to":[0,0,0],"ti":[0.724,0,0]},{"t":17.0000006924242,"s":[110.657,60.209,0]}],"ix":2},"a":{"a":0,"k":[32.553,37.706,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.429,0.24],[-2.884,5.153],[-0.429,-0.24],[2.885,-5.151]],"o":[[-0.43,-0.24],[2.885,-5.151],[0.429,0.24],[-2.885,5.152]],"v":[[-5.223,9.328],[-0.777,-0.436],[5.223,-9.328],[0.777,0.435]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.556999954523,0.536999990426,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[53.708,31.209],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.419,0.258],[-4.27,6.936],[-0.419,-0.258],[4.269,-6.935]],"o":[[-0.419,-0.258],[4.269,-6.936],[0.419,0.258],[-4.269,6.936]],"v":[[-7.73,12.558],[-0.758,-0.467],[7.73,-12.558],[0.758,0.467]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.556999954523,0.536999990426,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[47.387,21.728],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.405,0.279],[-4.573,6.65],[-0.406,-0.278],[4.572,-6.65]],"o":[[-0.405,-0.279],[4.573,-6.65],[0.405,0.279],[-4.573,6.65]],"v":[[-8.28,12.04],[-0.735,-0.506],[8.28,-12.042],[0.734,0.505]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.556999954523,0.536999990426,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[37.738,16.357],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-6.325,8.378],[-1.545,0.86],[-1.401,-0.707],[-0.22,-1.281],[-2.303,-1.33],[1.017,-1.762],[-1.904,-1.099],[0.438,-2.609],[0,0],[-1.884,-1.46],[0.706,-2.636],[8.825,-14.156],[10.784,5.694],[-0.367,10.607],[-2.949,2.041],[-0.571,-3.589]],"o":[[0,0],[6.324,-8.378],[1.545,-0.86],[1.402,0.706],[1.596,-1.939],[2.304,1.33],[0,0],[1.904,1.099],[-0.459,2.736],[0,0],[1.945,1.507],[-0.707,2.636],[-9.158,14.689],[-11.407,-6.023],[0.346,-10.016],[2.841,-1.965],[0.691,4.346]],"v":[[-17.535,-7.632],[-6.74,-22.076],[6.333,-36.38],[10.971,-36.749],[13.465,-33.391],[20.363,-34.589],[22.563,-28.538],[26.479,-28.079],[28.655,-22.57],[26.377,-15.826],[30.358,-14.93],[30.987,-7.947],[16.788,21.879],[-17.294,31.762],[-31.936,3.014],[-23.617,-22.577],[-17.156,-17.087]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.745000023935,0.725,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[32.553,37.706],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 4","np":2,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":30.0000012219251,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"hand-2 Outlines","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.389,"y":0},"t":0,"s":[129.637,60.209,0],"to":[-0.94,0,0],"ti":[0,0,0]},{"i":{"x":0.623,"y":1},"o":{"x":0.167,"y":0.167},"t":2.024,"s":[124,60.209,0],"to":[0,0,0],"ti":[-0.94,0,0]},{"i":{"x":0,"y":0},"o":{"x":0.333,"y":0.333},"t":4.048,"s":[129.637,60.209,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":6.476,"s":[129.637,60.209,0],"to":[-0.94,0,0],"ti":[0,0,0]},{"i":{"x":0.665,"y":1},"o":{"x":0.167,"y":0.167},"t":8.5,"s":[124,60.209,0],"to":[0,0,0],"ti":[-0.94,0,0]},{"i":{"x":0,"y":0},"o":{"x":0.333,"y":0.333},"t":10.524,"s":[129.637,60.209,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":12.953,"s":[129.637,60.209,0],"to":[-0.94,0,0],"ti":[0,0,0]},{"i":{"x":0.673,"y":1},"o":{"x":0.167,"y":0.167},"t":14.976,"s":[124,60.209,0],"to":[0,0,0],"ti":[-0.94,0,0]},{"t":17.0000006924242,"s":[129.637,60.209,0]}],"ix":2},"a":{"a":0,"k":[32.553,37.706,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-6.324,8.378],[-1.545,0.86],[-1.402,-0.707],[-0.22,-1.281],[-2.303,-1.33],[1.017,-1.762],[-1.905,-1.099],[0.438,-2.609],[0,0],[-1.884,-1.46],[0.707,-2.636],[8.826,-14.156],[10.784,5.694],[-0.366,10.607],[-2.949,2.041],[-0.571,-3.589]],"o":[[0,0],[6.325,-8.378],[1.545,-0.86],[1.401,0.706],[1.596,-1.939],[2.304,1.33],[0,0],[1.904,1.099],[-0.459,2.736],[0,0],[1.945,1.507],[-0.706,2.636],[-9.157,14.689],[-11.407,-6.023],[0.347,-10.016],[2.841,-1.965],[0.692,4.346]],"v":[[-17.535,-7.632],[-6.742,-22.076],[6.333,-36.38],[10.971,-36.749],[13.464,-33.391],[20.363,-34.589],[22.563,-28.538],[26.479,-28.079],[28.655,-22.57],[26.377,-15.826],[30.358,-14.93],[30.986,-7.947],[16.786,21.879],[-17.294,31.762],[-31.938,3.014],[-23.617,-22.577],[-17.158,-17.087]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.556999954523,0.536999990426,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[32.553,37.706],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":30.0000012219251,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"particle-8 Outlines","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.333],"y":[0]},"t":6.4,"s":[100]},{"t":22.4000009123707,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.138,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[161.579,70.143,0],"to":[2.5,0.542,0],"ti":[-2.5,-0.542,0]},{"t":17.0000006924242,"s":[176.579,73.393,0]}],"ix":2},"a":{"a":0,"k":[4.076,4.076,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.789,-1.677],[-1.677,-0.789],[-0.788,1.678],[1.677,0.789]],"o":[[-0.789,1.677],[1.678,0.789],[0.789,-1.677],[-1.677,-0.788]],"v":[[-3.036,-1.428],[-1.429,3.036],[3.036,1.428],[1.428,-3.038]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.8549019607843137,0.5450980392156862,0.5529411764705883,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[4.076,4.076],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":30.0000012219251,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"particle-7 Outlines","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":6.4,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.333],"y":[0]},"t":13,"s":[100]},{"t":24.00000097754,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.212,"y":1},"o":{"x":0.167,"y":0.167},"t":4.8,"s":[173.53,67.136,0],"to":[5.854,-0.5,0],"ti":[-5.854,0.5,0]},{"t":20.0000008146167,"s":[208.655,64.136,0]}],"ix":2},"a":{"a":0,"k":[5.942,5.942,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.505,-2.865],[-2.864,-0.506],[-0.505,2.865],[2.864,0.505]],"o":[[-0.505,2.865],[2.865,0.505],[0.505,-2.864],[-2.865,-0.505]],"v":[[-5.187,-0.915],[-0.915,5.187],[5.187,0.914],[0.915,-5.187]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.9882352941176471,0.9098039215686274,0.9098039215686274,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[5.942,5.942],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":30.0000012219251,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"particle-6 Outlines","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.333],"y":[0]},"t":6.4,"s":[100]},{"t":22.4000009123707,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.138,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[168.108,53.605,0],"to":[4.583,-0.875,0],"ti":[-4.583,0.875,0]},{"t":17.0000006924242,"s":[195.608,48.355,0]}],"ix":2},"a":{"a":0,"k":[4.804,4.804,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.404,-2.292],[-2.292,-0.404],[-0.404,2.292],[2.292,0.404]],"o":[[-0.404,2.292],[2.291,0.404],[0.404,-2.291],[-2.292,-0.404]],"v":[[-4.149,-0.732],[-0.731,4.15],[4.15,0.732],[0.732,-4.15]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.7647058823529411,0.23529411764705882,0.23529411764705882,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[4.803,4.804],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":30.0000012219251,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"particle-5 Outlines","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":6.4,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.333],"y":[0]},"t":13,"s":[100]},{"t":24.00000097754,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.212,"y":1},"o":{"x":0.167,"y":0.167},"t":4.8,"s":[163.17,58.428,0],"to":[2.771,-0.562,0],"ti":[-2.771,0.562,0]},{"t":20.0000008146167,"s":[179.795,55.053,0]}],"ix":2},"a":{"a":0,"k":[2.982,2.982,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.242,-1.375],[-1.375,-0.242],[-0.242,1.375],[1.375,0.243]],"o":[[-0.243,1.375],[1.375,0.243],[0.243,-1.375],[-1.376,-0.242]],"v":[[-2.49,-0.439],[-0.439,2.489],[2.49,0.439],[0.439,-2.49]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.9882352941176471,0.9098039215686274,0.9098039215686274,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[2.982,2.982],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":30.0000012219251,"st":0,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"particle-4 Outlines","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.333],"y":[0]},"t":6.4,"s":[100]},{"t":22.4000009123707,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.138,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[73.269,64.839,0],"to":[-4.458,0.625,0],"ti":[4.458,-0.625,0]},{"t":17.0000006924242,"s":[46.519,68.589,0]}],"ix":2},"a":{"a":0,"k":[3.164,3.163,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.601,-1.278],[-1.277,-0.601],[-0.601,1.277],[1.277,0.6]],"o":[[-0.601,1.277],[1.278,0.6],[0.601,-1.278],[-1.278,-0.601]],"v":[[-2.313,-1.088],[-1.088,2.313],[2.313,1.089],[1.088,-2.312]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.9882352941176471,0.9098039215686274,0.9098039215686274,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[3.164,3.164],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":30.0000012219251,"st":0,"bm":0},{"ddd":0,"ind":8,"ty":4,"nm":"particle-3 Outlines","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":6.4,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.333],"y":[0]},"t":13,"s":[100]},{"t":24.00000097754,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.212,"y":1},"o":{"x":0.167,"y":0.167},"t":4.8,"s":[75.582,55.3,0],"to":[-2.375,-0.333,0],"ti":[2.375,0.333,0]},{"t":20.0000008146167,"s":[61.332,53.3,0]}],"ix":2},"a":{"a":0,"k":[4.016,4.015,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[1.497,1.055],[1.055,-1.497],[-1.497,-1.056],[-1.055,1.497]],"o":[[-1.497,-1.055],[-1.056,1.497],[1.497,1.055],[1.056,-1.496]],"v":[[1.911,-2.711],[-2.71,-1.911],[-1.911,2.71],[2.71,1.91]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.9882352941176471,0.9098039215686274,0.9098039215686274,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[4.016,4.015],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":30.0000012219251,"st":0,"bm":0},{"ddd":0,"ind":9,"ty":4,"nm":"particle-2 Outlines","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.333],"y":[0]},"t":6.4,"s":[100]},{"t":22.4000009123707,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.138,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[73.293,48.233,0],"to":[-3.708,-0.958,0],"ti":[3.708,0.958,0]},{"t":17.0000006924242,"s":[51.043,42.483,0]}],"ix":2},"a":{"a":0,"k":[5.368,5.368,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[2.197,-1.138],[1.138,2.197],[-2.198,1.139],[-1.138,-2.198]],"o":[[-2.197,1.139],[-1.139,-2.198],[2.197,-1.138],[1.139,2.197]],"v":[[2.062,3.979],[-3.979,2.061],[-2.062,-3.98],[3.979,-2.062]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.8549019607843137,0.5450980392156862,0.5529411764705883,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[5.368,5.368],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":30.0000012219251,"st":0,"bm":0},{"ddd":0,"ind":10,"ty":4,"nm":"particle-1 Outlines","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":6.4,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.333],"y":[0]},"t":13,"s":[100]},{"t":24.00000097754,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.212,"y":1},"o":{"x":0.167,"y":0.167},"t":4.8,"s":[62.37,58.549,0],"to":[-5.25,-0.25,0],"ti":[5.25,0.25,0]},{"t":20.0000008146167,"s":[30.87,57.049,0]}],"ix":2},"a":{"a":0,"k":[4.349,4.348,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.364,-2.063],[-2.062,-0.364],[-0.364,2.062],[2.063,0.364]],"o":[[-0.364,2.063],[2.063,0.364],[0.364,-2.063],[-2.062,-0.364]],"v":[[-3.734,-0.659],[-0.659,3.734],[3.734,0.658],[0.659,-3.734]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.7647058823529411,0.23529411764705882,0.23529411764705882,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[4.348,4.348],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":30.0000012219251,"st":0,"bm":0}],"markers":[]} --------------------------------------------------------------------------------