An Android app which provides design news & inspiration as well as being an example of implementing material design.

Related tags

App plaid
Overview

[ 🚧 Work in progress πŸ‘·β€β™€οΈ ⛏ πŸ‘· πŸ”§οΈ πŸ‘· πŸ”§ 🚧 ] Plaid 2.0

Rewriting Plaid using Android Architecture Components, in Kotlin.

πŸ‘€ "Up for grabs" issues – We're happy to get your contributions on those!

πŸ‘ Comments and new issues created are welcomed.

πŸ›‘ We're currently not accepting external PRs that touch on the app's architecture.

CircleCI

Background

Plaid was written with one big goal: showcase material design in Android in a real application. While Plaid successfully achieved its goal, from an architecture point of view, it lacks all features that would make it a modular, scalable, testable and maintainable app: with UI logic in Android classes, no tests and only one module. Plaid represents a great real world app example: it provides a fairly complex set of functionalities, it has technical debt, it has features that have to be dealt with as APIs are being removed. All of these problems are encountered by many projects in the Android community and therefore, make Plaid a suitable showcase for all the advantages that architecture components bring.

More information

Goals

  • Migrate Plaid to Architecture Components. The refactoring will follow the architecture described in Guide to App Architecture.
  • Convert to Kotlin, while migrating to Architecture Components.
  • Modularize the app using dynamic feature modules.
  • Showcase the extensibility of the architecture by adding an extra data source, once the migration is finished.

Non-Goals

Changes to the styles, themes, icons, animations, transitions or any other UI elements that were the initial focus of Plaid, are outside the scope of this refactoring.

Android Studio IDE setup

Plaid requires Android Studio version 3.6 or higher.

Plaid uses ktlint to enforce Kotlin coding styles. Here's how to configure it for use with Android Studio (instructions adapted from the ktlint README):

  • Close Android Studio if it's open

  • Download ktlint using these installation instructions

  • Inside the project root directory run:

    ./ktlint --apply-to-idea-project --android

  • Remove ktlint if desired:

    rm ktlint

  • Start Android Studio


Plaid 1.0

Design news and inspiration.

Plaid is a showcase of material design that we hope you will keep installed. It pulls in news & inspiration from Designer News, Dribbble & Product Hunt. It demonstrates the use of material principles to create tactile, bold, understandable UIs.

Install on Google Play (Beta Testing)

Screenshots

Non-Goals

Plaid is a UI sample and seeks to demonstrate how to implement material design. To make this as clear as possible it explicitly does not attempt to:

  • Provide opinionated architecture/testing advice; it utilizes vanilla Android components. For advice on this, I'd recommend Blueprints.
  • Support pre-Lollipop devices. Doing so is entirely possible, but complicates things. For advice on doing this, see this fork.

License

Copyright 2015 Google LLC.

Licensed to the Apache Software Foundation (ASF) under one or more contributor
license agreements. See the NOTICE file distributed with this work for
additional information regarding copyright ownership. The ASF licenses this
file to you under the Apache License, Version 2.0 (the "License"); you may not
use this file except in compliance with the License. You may obtain a copy of
the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
License for the specific language governing permissions and limitations under
the License.
Comments
  • #544: Shortcut icon visibility issue on N_MR1 (25) powered devices is fixed

    #544: Shortcut icon visibility issue on N_MR1 (25) powered devices is fixed

    :loudspeaker: Type of change

    • [x] Bugfix
    • [ ] New feature
    • [ ] Enhancement
    • [ ] Refactoring

    :scroll: Description

    ic_app_shortcut_background.xml drawable moved from drawable-v26 to drawable. It was only available in drawable-v26 because of which shortcut icon was not visible on N_MR1(25) powered devices.

    As there is no api specific difference in this file so its better to move it in drawable directory rather than creating another file with same name in drawable.

    :bulb: Motivation and Context

    Shortcut icon was not visible on N_MR1(25 powered devices.) #544

    :green_heart: How did you test it?

    I ran application on two different simulators one with Android 9 (28) and other one with Android 7.1.1(25).

    :pencil: Checklist

    • [x] I ran ./gradlew spotlessApply before submitting the PR
    • [x] I reviewed submitted code
    • [ ] I added tests to verify changes
    • [ ] All tests passing

    :crystal_ball: Next steps

    :camera_flash: Screenshots / GIFs

    Screen Shot 2019-05-25 at 4 28 30 PM cla: no 
    opened by SubhanAli94 14
  • Demo BindsInstance + static provides

    Demo BindsInstance + static provides

    Resolves #538

    Opportunistically converted SearchDataManager to clean up generics across java interop and eliminate the need for the manual @Provides for it in the module

    Now SearchModule is fully stateless and also not instantiated at runtime or part of the component builder. If the other modules it includes were moved to this pattern as well, they could all piggyback off of the exposed Context and Activity depenendecies and create a fully stateless graph

    cla: yes Ready for review πŸ‘€ 
    opened by ZacSweers 14
  • Adds landscape layout for PlayerActivity

    Adds landscape layout for PlayerActivity

    Description

    Creates activity_dribbble_player_details.xml to encapsulate all of the details about the player

    Creates layout-w480dp folder which contains a landscape layout for activity_dribbble_player_details

    After

    16 - 1

    Before

    16 - 2

    @nickbutcher I tried to improve the landscape mode of dribble player layout. Let me know if you think is a good idea or not.

    cla: yes 
    opened by amilcar-andrade 12
  • Backport pt. 1 (continued from #62)

    Backport pt. 1 (continued from #62)

    As discussed in #47 (and continued from #62). This PR is intended to be minimal-to-no structural and functional changes, focusing just on compat drop-ins, API annotations, and beginning some work in gating off transitions that won't run on pre-lollipop.

    This commit:

    • Drops in compat* versions wherever possible, while including some local compat implementations as well.
    • Target annotations on areas that will only be Lollipop+ (for future reference, no functional changes yet)
    • Using appcompat theming where possible rather than material

    Future work would focus around fully supporting conditional transitions, taking advantage of android's resource directory versioning for API-dependent resources, and backporting some functionality with new logic (such as circular imageviews, transitions, path, arc motion, and ConnectivityManager).

    I know it's a lot, but after spending a lot of time this week trying to pull things apart in a modular way, it just seemed too much to keep track of. I would've started hitting rebase hell and risking unbuildable commits due to missed imports here or there. One approach might be to break it down into smaller components (per-package maybe?). Another idea would be to PR into another branch so that you could introduce the changes slowly. Let me know what you thinkm and sorry again for the large pull diff :/.

    Testing-wise, I've been pretty thorough in testing it to make sure things look and behave the same way. I haven't been able to test designer news or product hunt though. DN's API website seems to be down, and PH requires my emailing them first and asking for permission.

    cla: yes 
    opened by ZacSweers 12
  • About module viewmodel crash fix

    About module viewmodel crash fix

    :loudspeaker: Type of change

    • [x] Bugfix
    • [ ] New feature
    • [ ] Enhancement
    • [ ] Refactoring

    :scroll: Description

    The AboutViewModelFactory throws Unknown ViewModel class exception because it is currently checking whether they are equal or not. So replaced it by using isAssignableFrom. Removed deprecated ViewModelProviders.of and replaced with the stable version of creating viewmodel

    :bulb: Motivation and Context

    Cannot open about us section since the app crashes.

    :green_heart: How did you test it?

    Manual testing by removing the buggy code

    :pencil: Checklist

    • [ ] I ran ./gradlew spotlessApply before submitting the PR
    • [x] I reviewed submitted code
    • [ ] I added tests to verify changes
    • [x] All tests passing

    :crystal_ball: Next steps

    :camera_flash: Screenshots / GIFs

    cla: no 
    opened by cerberusv2px 11
  • Adds shortcut widget for searching

    Adds shortcut widget for searching

    Plaid already supports shortcuts for search and for creating a designer story but it is only available on Android 7.1

    Adding a shortcut widget on the home screen is a good enough backport for older versions

    ezgif com-video-to-gif

    cla: yes 
    opened by amilcar-andrade 11
  • Transition issue with Android Q beta 5

    Transition issue with Android Q beta 5

    Since it's already beta 5 and the issue will probably be stuck on level 1 external contractor filtering I'm posting this here too, sorry for that.

    https://issuetracker.google.com/issues/137487202

    Start Plaid, open anything with image to have a transition, press home, return to app via recent, press back, the normal transition does not run on Android Q beta 5 Pixel 3a and emulators.

    Hoping this can reach the proper team faster with your help.

    opened by Tolriq 10
  • [618] Migration from ViewPager to ViewPager2

    [618] Migration from ViewPager to ViewPager2

    Fixes issue #618 - Update the About screen to use the ViewPager2 library

    Issues encountered & feedback

    Overall smooth migration. However new ViewPager2 does not have pageMargin variable, so I couldn't figure out how to keep the space between pages.

    *This is my first contribution to an open source Android project. Feedback welcomed!

    Steps taken

    1. Added dependency
    2. Switched from ViewPager to ViewPager2 in activity_about.xml
    3. Modified AboutActivity.java to use new view pager
    4. Replaced old PagerAdapter extension with RecyclerView.Adapter in AboutPagerAdapter.java and implemented member functions
    5. Removed old ViewPager.OnPageChangeListener implementation in InkPageIndicator.java and replaced it with new registerOnPageChangeCallback
    cla: no 
    opened by arangob 10
  • Use api instead of implementation

    Use api instead of implementation

    :loudspeaker: Type of change

    • [ ] Bugfix
    • [ ] New feature
    • [ ] Enhancement
    • [X] Refactoring

    :scroll: Description

    api is being used instead of implementation in gradle

    cla: yes 
    opened by RicardoBravoA 9
  • fix crash when open about page

    fix crash when open about page

    AboutViewModel class check should ref to java class instead of kotlin's

    :loudspeaker: Type of change

    • [x] Bugfix
    • [ ] New feature
    • [ ] Enhancement
    • [ ] Refactoring

    :scroll: Description

    fix crash when open about page, AboutViewModel class check should ref to java class instead of kotlin's

    :bulb: Motivation and Context

    Enter about-page will crash without the change. Didn't create issue due to minor fix.

    :green_heart: How did you test it?

    mock test and manual test pass on emulator and also real device.

    :pencil: Checklist

    • [x] I ran ./gradlew spotlessApply before submitting the PR (BUILD SUCCESSFUL in 1m 20s 8 actionable tasks: 8 executed)
    • [x] I reviewed submitted code
    • [ ] I added tests to verify changes
    • [x] All tests passing

    :crystal_ball: Next steps

    :camera_flash: Screenshots / GIFs

        Process: io.plaidapp, PID: 23283
        java.lang.RuntimeException: Unable to start activity ComponentInfo{io.plaidapp/io.plaidapp.about.ui.AboutActivity}: java.lang.IllegalArgumentException: Unknown ViewModel class
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2913)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048)
            at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
            at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
            at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808)
            at android.os.Handler.dispatchMessage(Handler.java:106)
            at android.os.Looper.loop(Looper.java:193)
            at android.app.ActivityThread.main(ActivityThread.java:6669)
            at java.lang.reflect.Method.invoke(Native Method)
            at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
         Caused by: java.lang.IllegalArgumentException: Unknown ViewModel class
            at io.plaidapp.about.ui.model.AboutViewModelFactory.create(AboutViewModelFactory.kt:38)
            at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:164)
            at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:130)
            at io.plaidapp.about.ui.AboutActivity.onCreate(AboutActivity.kt:62)
            at android.app.Activity.performCreate(Activity.java:7136)
            at android.app.Activity.performCreate(Activity.java:7127)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2893)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048)Β 
            at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)Β 
            at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)Β 
            at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)Β 
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808)Β 
            at android.os.Handler.dispatchMessage(Handler.java:106)Β 
            at android.os.Looper.loop(Looper.java:193)Β 
            at android.app.ActivityThread.main(ActivityThread.java:6669)Β 
            at java.lang.reflect.Method.invoke(Native Method)Β 
            at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)Β 
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)Β ```
    cla: yes 
    opened by ttoommbb 9
  • Fail build

    Fail build

    After i clone and build , i get this message Error:Execution failed for task ':app:transformClassesWithInstantRunForDebug'.

    com.android.build.api.transform.TransformException: java.lang.RuntimeException: java.lang.RuntimeException: java.io.IOException: Failed to find byte code for android/util/IntProperty

    opened by seakleng016 9
  •  Cause: com/android/tools/idea/gradle/run/OutputBuildAction has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0

    Cause: com/android/tools/idea/gradle/run/OutputBuildAction has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0

    1. clone plaid project
    2. change jdk version to 1.8
    3. building --> failed with above error.

    My building environment is like following. Android Studio Dolphin 2021.3.1 AGP Version : 3.6.1 Gradle Version : 5.6.4 compile sdk version : 29

    How can I fix this error?

    opened by slpy22 0
  • Gradle build Issue for search module

    Gradle build Issue for search module

    I am trying to run the application but I am getting this issue during the build. Could not resolve all task dependencies for configuration ':search:kotlinCompilerPluginClasspathDebug' Could not find net.java.dev.jna:jna:5.6.0.

    I am using below configurations: Kotlin version- 1.6.21 Gradle version- 7.2 Android Studio Bumblebee

    opened by mohdaquib 0
  • Fix: multi-window mode insets problems (#236)

    Fix: multi-window mode insets problems (#236)

    Takes care of few WindowInsets problems with HomeActivity layout:

    • toolbar not being correctly padded when returning from multi-window mode (bottom position)
    • toolbar not being correctly laid out when back to multi-window after activity was β€œhidden” with second activity

    Resolves: #236

    :loudspeaker: Type of change

    • [ ] Bugfix
    • [ ] New feature
    • [ ] Enhancement
    • [ ] Refactoring

    :scroll: Description

    :bulb: Motivation and Context

    :green_heart: How did you test it?

    :pencil: Checklist

    • [ ] I ran ./gradlew spotlessApply before submitting the PR
    • [ ] I reviewed submitted code
    • [ ] I added tests to verify changes
    • [ ] All tests passing

    :crystal_ball: Next steps

    :camera_flash: Screenshots / GIFs

    opened by radekkozak 0
  • Upgraded AGP and kotlin version

    Upgraded AGP and kotlin version

    :loudspeaker: Type of change

    • [ ] Bugfix
    • [ ] New feature
    • [ ] Enhancement
    • [X] Refactoring

    :scroll: Description

    • Upgraded Kotlin and AGP version.
    • com.google.testing.platform - Added it in google maven include group.
    • Added mavenCentral in subprojects - as few dependencies are located in mavenCentral.

    :bulb: Motivation and Context

    • Upgrade AGP version to 7.0.0
    • Upgrade Kotlin version to 1.5.21

    :green_heart: How did you test it?

    No changes in terms of functionality, project compiled and ran successfully on Android Studio Arctic Fox | 2020.3.1

    :pencil: Checklist

    • [X] I ran ./gradlew spotlessApply before submitting the PR
    • [X] I reviewed submitted code
    • [ ] I added tests to verify changes
    • [ ] All tests passing

    :crystal_ball: Next steps

    :camera_flash: Screenshots / GIFs

    cla: yes 
    opened by ritesh-singh 0
  • Rearrange images

    Rearrange images

    :loudspeaker: Type of change

    • [ ] Bugfix
    • [ ] New feature
    • [ ] Enhancement
    • [ ] Refactoring

    :scroll: Description

    :bulb: Motivation and Context

    :green_heart: How did you test it?

    :pencil: Checklist

    • [ ] I ran ./gradlew spotlessApply before submitting the PR
    • [ ] I reviewed submitted code
    • [ ] I added tests to verify changes
    • [ ] All tests passing

    :crystal_ball: Next steps

    :camera_flash: Screenshots / GIFs

    cla: yes 
    opened by omarzer0 3
Owner
Nick Butcher
Android designer and developer.
Nick Butcher
Android News App built in kotlin with implementation of MVVM architecture, android navigation components and retrofit. Displays news to users allowing them to share and save news.

News-App Android news app built in kotlin that fetches news data from news api with Retrofit and displays news to users. This App follow MVVM architec

Raj Manjrekar 16 Dec 29, 2022
A news app made using android studio in Java with features like favourite news, Location detector for local news, and especially made with HUAWEI APIs

HuaweiGlobalNewsApp A news app made using android studio in Java with features like favourite news, Location detector for local news, and especially m

Christian Imanuel Hadiwidjaja 1 Oct 30, 2021
A News Application Shows Breaking News of the Country with a feature to save News for future Use.

A News Application Shows Breaking News of the Country with a feature to save News for future Use.You can search news on any topic.Used all latest stuffs in android like Navigation Component, MVVM Architecture, Retrofit, Room DataBase, Kotlin Corutines etc

Aman Bhatt 2 Oct 20, 2022
NewsFeedApp - An android news-feed-app which shows latest news of various sources

NewsFeedApp An android news-feed-app which shows latest news of various sources

Srihitha Tadiparthi 4 Aug 8, 2022
Newesy is news app which uses NewsAPI to fetch news.

Newesy is news app which uses NewsAPI to fetch news.The main aim of this app was to learn Modern Android Architecture (MVVM).It uses MVVM,Kotlin-coroutines,Room,ViewModal,Retrofit,GSON and Navigation graph

SHANTANU RATHOD 7 Oct 29, 2022
An app which displays questions from Stack Exchange from it's api. Can search questions with tags as well. Uses MVVM architecture, dependency injection, coroutines, retrofit2 for network calls

Stack Exchange app What the app does? Shows a list of trending questions from stack exchange api Can search for the desires question. Can add tags to

null 0 Apr 27, 2022
The News App has been carried out within the framework of the MVVM architecture, information about news is obtained by consulting an API, it is built usisng Jetpack Copose, Coroutines, Dependency Injection with Hilt and Retrofit

Journalist The News App consists of an application that displays the latest news from EEUU from an API that provides official and updated information.

null 0 Nov 3, 2021
Android app for monitoring web services. Notifies you of any HTTP or Onion destination not being available.

Webmon Monitor web services and get notified, if a service becomes unavailable. EARLY BIRD DOWNLOAD App Features Simple UI. No login required. Get not

null 36 Dec 29, 2022
Freegemas libGDX is an Android and Java desktop port of Freegemas, which in turn is an open source version of the well known Bejeweled.

freegemas-gdx Freegemas libGDX is an Android, HTML 5 and Java desktop port of Freegemas, which in turn is an open source version of the well known Bej

David Saltares 144 Jun 21, 2022
Freegemas libGDX is an Android and Java desktop port of Freegemas, which in turn is an open source version of the well known Bejeweled.

freegemas-gdx Freegemas libGDX is an Android, HTML 5 and Java desktop port of Freegemas, which in turn is an open source version of the well known Bej

David Saltares 144 Jun 21, 2022
This is a News Application for android mobiles, fetching news through Guardian API.

News-In-Hand This is a NEWS FEED APP which gives a user regularly-updated news from the Internet. To achieve this, I use the Guardian API. This is a w

Bhramar Virmani 1 Nov 5, 2021
Protect yourself from being tracked 🌍 by AirTags 🏷 and Find My accessories πŸ“

AirGuard - AirTag tracking protection Protect yourself from Find My Tracking The AirTags and other Find My devices are simple, small and perfect to tr

Secure Mobile Networking Lab 1.4k Jan 9, 2023
Medich is an application that raises the problem of satisfaction related to BPJS, especially in the lower classes, with Medich being able to solve all these problems

Medich is an application that raises the problem of satisfaction related to BPJS, especially in the lower classes, with Medich being able to solve all these problems. Medich has a Donation feature that will be very useful for the Community

Zainul 5 Dec 18, 2022
A Task Management and Habit-building App, representating my journey in Android as well as my first Kotlin App. πŸ€— ✨

A Task Management and Habit-building App, representating my journey in Android as well as my first Kotlin App. ?? ✨

Sarthak Musmade 8 May 8, 2022
Olalekan Fagbemi 0 Nov 7, 2021
An app for random Reddit memes with the option to share it as well!

Meme Share App What - An app for random Reddit memes with the option to share it as well! Why - Wanted to learn about integrating APIs with Android ap

Infosecc Gurung 0 Jul 14, 2022
A performance-oriented fork of Purpur intended to increase performance for entity-heavy servers by implementing multi-threaded and asynchronous improvements.

Petal is a performance-oriented fork of Purpur intended to increase performance for entity-heavy servers by implementing multi-threaded and asynchronous improvements.

Bloom 224 Jan 3, 2023
Geoponics is an E-Commerce Android Based Application Designed for Farmers As Well As Normal Users to Buy and Sell Agricultural goods!

Geoponics : E-Commerce Application Geoponics is an E-Commerce Android Based Aplication Designed for Farmers As Well As Normal Users to Buy and Sell Ag

Prasad 3 Aug 31, 2021
Math World is an Android Application specialized in mathematics, where the application includes some sections related to arithmetic, unit conversion, scientific math laws and constants, as well as some mathematical questions that need some intelligence to reach the solution.

Math World is an Android Application specialized in mathematics, where the application includes some sections related to arithmetic, unit conversion, scientific math laws and constants, as well as some mathematical questions that need some intelligence to reach the solution.

null 7 Mar 12, 2022