woopy | Android Universal Listings + Chat App Template

woopy | Android Universal Listings + Chat App Template

iOS, Android and Web versions can share the same Parse database

Feb 16th 2018
• Edited the Get verified code into as it follows:
   if (userObj.get(Configs.USER_EMAIL_VERIFIED) != null) {
      if (userObj.getBoolean(Configs.USER_EMAIL_VERIFIED)) {
         verifTxt.setText("Verified: Yes");
      } else { verifTxt.setText("Verified: No"); }
   } else { verifTxt.setText("Verified: No"); }

• Edited the Get verified code in as it follows:
    if (currUser.get(Configs.USER_EMAIL_VERIFIED) != null) {
            if (currUser.getBoolean(Configs.USER_EMAIL_VERIFIED)) {
                verifiedtxt.setText("Verified: Yes");
            } else { verifiedtxt.setText("Verified: No"); }
     } else { verifiedtxt.setText("Verified: No"); } 

• Edited the Get verified code in as it follows:
    if (sellerPointer.get(Configs.USER_EMAIL_VERIFIED) != null) {
       if (sellerPointer.getBoolean(Configs.USER_EMAIL_VERIFIED)) {
          verifiedTxt.setText("Verified: Yes");
       } else { verifiedTxt.setText("Verified: No"); }
    } else { verifiedTxt.setText("Verified: No"); }

• Removed the following 2 lines in map_screen.xml:
Jan 20th 2018
• Added this line in the dependencies list of build.gradle (Module: app):
    compile 'com.squareup.okhttp3:okhttp:+'
Jan 9th 20018
• Edited -> 'signupButt()' method in order to display an alert about the email verification after signing up
Dec 25th 2017
• Edited the 'Button opButt()' method in by embedding its code into an IF statement, so the app won't crash in case a user is not logged in
• Removed this line from the 'getUserDetailsFromFB()' method in, since it's not possible to manually set the 'emailVerified' value in the Parse Dashboard:
       currUser.put(Configs.USER_EMAIL_VERIFIED, true);
Nov 29th 2017
• Resized the images into drawable-xxhdpi folder to a smaller size so it won't crash on Android 7.x devices
Nov 25th 2017
• Added a 'Choose Location (optional)' button in sell_edit_item.xml and its relative code into (edited the 'submitAdButt()' method and added a 'chooseLocationButt()')
• Added and map_screen.xml files into the project, so now you can choose a specific location while posting an Ad
Nov 11th 2017
• Edited just a few lines of code into -> onCreate() method, as it follows:
     // Get objectID for adObj
     Bundle extras = getIntent().getExtras();
     String objectID = extras.getString("objectID");
     Log.i("log-", "OBJECT ID: " + objectID);

     // YOU'RE EDITING AN ITEM ------------------
     if (objectID != null) {

in order for the app to recognize if you're selling a new item or editing it.
Nov 2nd 2017
• Updated to Android Studio 3 and buildToolsVersion to '26.0.2'
Oct 7th 2017
• Added a custom 'pd.xml' file in the 'layout' folder and some code into ('showPD()'  and 'hidePD()' methods), which are used to replace the ProgressDialog code in the java files (that's because ProgressDialog is deprecated by API 26 | Android O)
So I've replaced all the:

with the new lines of code to show and hide the custom ProgressDialog, which start with:

• Edited 'getUserDetailsFromFB()' method in in case of no email from Facebook login
Sep 9th 2017
• Edited the code included into:
 // Image from Camera
 if (requestCode == CAMERA) {
in, in order to adjust image orientation on pictures taken with some device.
Aug 27th 2017
• Updated buildToolsVersion to '26.0.1' in build.gradle (Module:app)
• Added this line into 'repositories' in build.gradle (Project:):
        maven { url "" }
Aug 9th 2017
• Removed the Wizard screen from showing up at app startup, in this way users will be able to browse categories and ads without needed to be logged in. For all the rest, a Login/sign up is required.


Otherwise, here's the Change Log:
• Added a 'showLoginAlert()' method in 
• Added a 'dismissButton' in wizard.xml and its code in 
• Added a few IF statements that start with 'if (ParseUser.getCurrentUser().getUsername() != null) {'  into the following files:
- -> 'chatButt()' method an all the tab bar buttons' onClickListener() methods 
- -> 'commButt', 'likeButt' and 'chatButt' methods 
- -> 'feedbackButt', 'likeButt', 'chatButt' and 'commButt' and 'queryIfYouLikedThisAd()' methods 
• Edited 'logoutButt' -> startActivity() method in order to go to Home screen after logout
July 20th 2017
• Updated targetSdkVersion and compileSdkVersion to 26 in build.gradle
• Edited the image picked methods in,, and
• Added a provider_paths.xml file into res/xml
• Added a <provider> tag into Manifest.xml
• Added a Storage permission request in the onStart() method in 

woopy is a Universal App template where you can browse and post listings on the go, new or used stuff you want to sell. You can search for keywords or category, chat with seller by his item’s page, log in with Facebook or email, like and share ads, and a lot more.
Besides uploading up to 3 images while posting an ad, This app allows you to also upload a 10-second video, this is a great feature that other listings classifieds apps do not have!
Users will be able to report ads or users and block/unblock inappropriate users to prevent getting chat messages from blocked people. They will also able to send Feedbacks to other sellers
woopy has also a verification email system, once a user signs up, the back4app server sends a verification email based on the email address the user typed in the signup screen. People will be able to see if a user is Verified or not by entering his/her Profile screen.
The Categories names and images are stored into the Parse Dashboard, so you’ll be able to add new categories remotely without having to update the app.
Check its demo APK to see it in action!

Since its backend is by Parse SDK you don’t have to buy any domain/hosting, there are NO php files to upload to a web server so you’ll save some money for server side, also because back4app offers a generous free plan.

woopy is a native Android Studio project, Universal, super easy to customize, backend with Parse Server hosted on

About Parse SDK and back4app

Read this article for more info about back4app and Parse SDK:

Can I host Parse Server on my own server?

Yes, although I don’t provide support for the setup process, you can read the official Guide here:

What about free support for this template?

I can offer free support for bugs encountered in the original code. Instead, if you’ve edited the code and messed something up with it, I may apply some fee to fix it either via TeamViewer or by checking your app project files directly on my computer.

How do I rename the app’s package name?

Read this tutorial to learn how to rename a package name:

Should I use the latest version of Android Studio to edit this template?

Yes, I always update my apps to the latest version of the IDE and you also should make sure you’ve updated the Android Tools to their latest version by the Android SDK manager.

The demo APK crashes on startup

Make sure that the minimum Android version of your device is the one listed in the FEATURES section below. If the problem persists, please contact me through my profile’s contact form and send me the Logcat message you get when the app crashes along with the steps you made to reproduce the crash. Please note that not all real devices print an error Logcat message, in this case just run the APK into the Android Studio’s emulator and you’ll surely get the red messages about your issue.

How do I remove AdMob banner ads?

  1. Enter the .xml files where there’s an AdView and remove its code:
  2. Enter the .java files where there’s an AdRequest instance into its onCreate() method and remove its code:
            // Init AdMob banner
            AdView mAdView = (AdView) findViewById(;
            AdRequest adRequest = new AdRequest.Builder().build();
  3. Lastly, remove the play-services-ads reference in the build.gradle file:
        compile ''

How to change images in the Categories class of my Parse Dashboard?

After importing the Categories.json file into your own Parse Dashboard, you have to double-click in the empty space between the edge of a cell and the blue image button to replace the existing images, check the screenshot below:

After importing Categories.json in my Parse Dashboard, I see no data

That may happen sometimes, it’s a bug in the Parse Dashboard, so in this case you must manually add rows and columns on your own.
1. Click Edit -> Add a column, choose String as type of data and type exactly category, then click ‘Add column’
2. Click Edit -> Add a column, choose File as type of data and type exactly image, then click ‘Add column’
3. Now you can enter the empty cells and insert the name of your first Category, doublie click in the empty cell of the image column and upload your first image.
4. Repeat the steps above for each category you want to insert in your Parse database.

How do I change the order of Categories?

The only way to do that is to remove all rows from the Categories class and add then again based on the order you want categories to be shown in the Home screen of the app since they get ordered by their ‘createdAt’ date.

  • Android Studio 3.x project – Universal – Android 5.0+
  • AdMob banners
  • Backend with Parse SDK hosted on back{4}app
  • Browse ads by Category or search by Keywords
  • Sort ads by Recent, Price, Most liked and Condition
  • Map with radius distance circle and slider to change the nearby distance
  • Post/edit ads, with 3 pics and an optional 10-second video
  • Send/read Feedbacks and Comments
  • Report/block inappropriate users or ads
  • Chat with sellers within the app, with the possibility to attach pictures to the chat messages
  • Push Notifications for chat messages, likes, feedbacks and comments
  • Check your liked ads in the My Likes screen
  • Activity screen
  • List of active chats
  • Easy to Customize
  • Well commented code
  • User Guide and PSD graphics included

  • The latest version of Android Studio and basic knowledge of its interface
  • Photoshop (or similar photo editor softwares)
  • Windows PC or Mac
  • Free account on back4app
  • Facebook developer account
  • Google Developer and Play Store account
  • A valid AdMob account account to create a banner UNIT ID
  • A real device with Android 5.0 or above (recommended)

We’ve recently found out that some developers have bought our app templates, reskinned them just a bit and put them on sale on other source code markets similar to CodeCanyon, saying that they developed and own such source codes.
That is a serious copyright infringement, developers who buy our templates are allowed to reskin and sell them as apps on the App Store (accordingly to the License type they’ve purchased a template for), but are not allowed to put our original source codes for sale on source code markets, including CodeCanyon. We will report developers who made copyright infringements to the competent authorities. Thanks.