Make Android RSS reader app

This is a no-nonsense RSS/Atom feed reader app for Android.

One of its primary features is that it parses HTML it finds in feeds and displays it as regular text. No ridiculous web-views here. But still, images are rendered in-line and links are clickable for example.

Quick install

Clone the project:

git clone --recursive http://ift.tt/2obQ4aZ

Then build and install the app to your phone which is connected via USB:

./gradlew installDebug

More details

This is a no-nonsense RSS/Atom feed reader app for Android.

Features:

  • Parses HTML into text
  • Offline reading
  • Local storage
  • Background synchronization
  • Notification support
  • OPML Import/Export
  • Gives access to enclosure links
  • Material design

Screenshots

The post Make Android RSS reader app appeared first on Tell Me How - A Place for Technology Geekier.

OpenLauncher – Make Launcher in Android

This an open source Android launcher project, started from scratch. We aim to create a powerful and community driven Android launcher.

Grab the APKs here to test it and you can also help by reporting bugs.

Features Supported
Paged desktop Yes
Dock Yes
Scrollable dock No
Double tab to sleep Yes
Dock Yes
Scrollable background Yes
Drag n drop Yes
Paged app drawer Yes
Vertical app drawer Yes
Hide apps Yes
Search bar Yes
Iocn packs Yes
Widget Yes
Gesture Yes

 

There are three module

  • launcher – The launcher code
  • materialpreffragment – simple lib for custom settings page
  • smoothviewpager – A modified version of original ViewPager

launcher

The structure goes like this

  • activity
  • Home
  • MinBarEditActivity
  • SettingsActivity
  • util (Folder)
  • AppManager
  • AppUpdateReceiver
  • DragAction
  • DragNavigationControl
  • GoodDragShadowBuilder
  • GroupIconDrawable
  • IconListAdapter
  • LauncherAction
  • LauncherSettings
  • Tools
  • WidgetHost
  • widget (Folder)
  • AppDrawer
  • CellContainer
  • Desktop
  • Dock
  • DragOptionView
  • GroupPopupView
  • PageIndicator
  • WidgetView

materialpreffragment

A simple lib extracted from one of my old project, to enable a custom and easy to use settings fragment.

smoothviewpager

A modified version of original ViewPager in order to achieve the smooth scrolling of the ViewPager. Even if the user has scrolled a lot in the vertical axis, scrolling is still enable.

Todo list

Desktop clock customization

More action for the mini bar (later to support expanable mini bar)

Code refactoring

Support landscape orientation

Add more customization settings

Screenshots

The post OpenLauncher – Make Launcher in Android appeared first on Tell Me How - A Place for Technology Geekier.

OpenStreetMap surveyor Android app

An Android app which finds wrong, incomplete or extendable data in the user’s vicinity and provides him the tools to complete these easily and directly on site without having to use another editor.

The found issues are presented to the user as markers on a map (like i.e. in Mapdust) that each are solvable by filling out a simple form to complete/correct the information on site. The user’s answer is then processed and directly uploaded into the OSM database in atomic commits in the name of the user’s OSM account. Since the app is meant to be used on a survey, it can be used offline and otherwise aims to be economic with data usage.

The app is aimed at users who do not know anything about OSM tagging schemes but still want to contribute to the OpenStreetMap by surveying their neighbourhood (or other places as well). Because of the target group, only those quests are shown which are answerable very clearly by asking one simple question and only those quests are created which contain very few false positives.

Screenshots

The post OpenStreetMap surveyor Android app appeared first on Tell Me How - A Place for Technology Geekier.

μlogger – Real time Geo-location PHP Server

μlogger is a web viewer for tracks uploaded with μlogger mobile client and a web application for real-time collection of geolocation data, tracks viewing and management. Together with a dedicated μlogger mobile client it may be used as a complete self hosted server–client solution for logging and monitoring users’ geolocation.

Live demo:

Requirements:

  • PHP 5.5
  • MYSQL 4.1
  • browser with javascript enabled, cookies for authentication and saving preferences

Features:

  • simple
  • allows live tracking
  • track statistics
  • altitudes graph
  • multiple users
  • user authentication
  • Google Maps API v3
  • OpenLayers v2 (OpenStreet and other layers)
  • ajax
  • user preferences stored in cookies
  • simple admin menu

Todo

  • install script
  • custom icons
  • improve admin menu
  • track editing
  • track display filters (accurracy, provider)

The post μlogger – Real time Geo-location PHP Server appeared first on Tell Me How - A Place for Technology Geekier.

μlogger – Real time Geo-location Android App

μlogger is a android application for real-time collection and publishing of geolocation data and for continuous logging of location coordinates, designed to record hiking, biking tracks and other outdoor activities.

Application works in background. Track points are saved at chosen intervals and may be uploaded to dedicated server in real time. This client works with μlogger web server. Together they make a complete self owned and controlled client–server solution.

Features

  • meant to be simple and small (μ);
  • low memory and battery impact;
  • uses GPS or network based location data;
  • synchronizes location with web server in real time, in case of problems keeps retrying;
  • alternatively works in offline mode; positions may be uploaded to the servers manually;
  • configurable tracking settings

Screenshots

api10_main3 api10_summary api24_settings

Help

  • μlogger’s current status is shown by two leds, one for location tracking and one for web synchronization:
led tracking synchronization
status green on, recently updated synchronized
status yellow on, long time since last update synchronization delay
status red off synchronization error
  • clicking on current track’s name will show track statistics

 

The post μlogger – Real time Geo-location Android App appeared first on Tell Me How - A Place for Technology Geekier.

d

Application works in background. Track points are saved at chosen intervals and may be uploaded to dedicated server in real time. This client works with μlogger web server. Together they make a complete self owned and controlled client–server solution.

Features

  • meant to be simple and small (μ);
  • low memory and battery impact;
  • uses GPS or network based location data;
  • synchronizes location with web server in real time, in case of problems keeps retrying;
  • alternatively works in offline mode; positions may be uploaded to the servers manually;
  • configurable tracking settings

Screenshots

api10_main3 api10_summary api24_settings

Download

Get it on F-Droid

Help

  • μlogger's current status is shown by two leds, one for location tracking and one for web synchronization:
led tracking synchronization
status green on, recently updated synchronized
status yellow on, long time since last update synchronization delay
status red off synchronization error
  • clicking on current track's name will show track statistics

License

  • GPL, either version 3 or any later

The post d appeared first on Tell Me How - A Place for Technology Geekier.

Cool Cards Menu Android Library

Cool cards menu Android library is a really cool as name define itself. It concept about multi tasks switching such like that, it’s thought-provoking and entertaining too.

You can see the demo here :

Working demo of Cool Cards Menu Android Library:

You can fun with code : BlurImageView For Android

I published the library with Jitpack, so add it to your build.gradle with:

repositories {
...
maven { url "https://jitpack.io" }
}

 Add the dependency:

dependencies {
compile 'com.github.DxTT:coolMenu:v1.1'
}

Note:

If you got the problem in adding external library in Android Studio.

The usage is really like ViewPager, just add CoolMenuFrameLayout to your layout.

An example of basic usage in layout.xml:

<?xml version="1.0" encoding="utf-8"?>
<merge
xmlns:android="http://ift.tt/nIICcg"
xmlns:app="http://ift.tt/GEGVYd"
xmlns:tools="http://ift.tt/LrGmb4"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.foocoder.coolmenu.MainActivity"
tools:ignore="all"
tools:showIn="@layout/activity_main">

<com.dxtt.coolmenu.CoolMenuFrameLayout
android:id="@+id/rl_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
app:num="four"/>
</merge>

This statement declares the number of cards, The upper limit is five.

app:num="four"

You can set your title icon or title style in xml like this:

app:titleSize="@dimen/cl_title_size"
app:titleColor="@color/colorPrimary"
app:titleIcon="@drawable/menu"

Like ViewPager,set an Adapter for the CoolMenuFrameLayout view.

coolMenuFrameLayout = $(R.id.rl_main);
String[] titles = {"CONTACT", "ABOUT", "TEAM", "PROJECTS"};
titleList = Arrays.asList(titles);
//set your titles,which is optional
coolMenuFrameLayout.setTitles(titleList);
//set your menu icon
coolMenuFrameLayout.setMenuIcon(R.drawable.menu2);

fragments.add(new Fragment1());
fragments.add(new Fragment2());
fragments.add(new Fragment3());
fragments.add(new Fragment4());

FragmentPagerAdapter adapter = new FragmentPagerAdapter(getSupportFragmentManager()) {
@Override
public Fragment getItem(int position) {
return fragments.get(position);
}

@Override
public int getCount() {
return fragments.size();
}
};
coolMenuFrameLayout.setAdapter(adapter);

Download this library from here. Hope you like this library tutorial isn’t it. Please comment below for appreciation.

The post Cool Cards Menu Android Library appeared first on Tell Me How - A Place for Technology Geekier.

Top 5 IoT Hacks

In this article you can get top 5 IoT hack which can ease and safe your life. The Internet of Things (IoT) automates your lives by connecting everything around you from your cars to your homes to even your bodies.

On the other side of the spectrum is the concern for the safety and security of your data. All data is interconnected, which reduces the efforts needed by hackers to hack the entire system. A large number of Internet-connected devices lack even the most basic cyber security protocols, making these hackable in minutes. And even though most secure and trusted machines give hackers a tough time, one tiny loophole is sufficient for them to steal your data.

You are on the driving seat, but it is not you who is driving

Hack iot car

Charlie Miller and Chris Valasek, automotive cyber security researchers, have proved that hacking Jeeps is child’s play for them, especially because all carmakers are doing their best to turn an automobile into a smartphone. Uconnect, an Internet-connected computer feature in hundreds of thousands of Fiat Chrysler cars, sport utility vehicles (SUVs) and trucks, controls the vehicles’ entertainment and navigation, enables phone calls and offers Wi-Fi hot spots. Uconnect’s mobile connection lets anyone who knows the car’s Internet Protocol (IP) address gain access from anywhere in the world. In 2015, the duo attacked a Jeep over the Internet, from a distance of around 15 kilometres. They toyed with the air-conditioning, radio and windshield wipers, disabled brakes at low speeds and managed to paralyse the vehicle. This made Chrysler announce for a recall of 1.4 million vehicles and fix the vulnerabilities. But now these researchers have come out with better hacking tricks.

Adventures of Barnaby Jack

Barnaby Jack, a hacker programmer and computer security expert, has managed to hack multiple devices including automatic teller machines (ATMs), pacemakers, ear implants and insulin pumps. At Black Hat conference in 2010, he gave a presentation on jackpotting, or exploiting ATMs to make these dispense cash without using a bank’s debit or credit card. Jack gave demonstrations about different kinds of attacks involving physical access to the machines and completely automated remote attacks. In both cases, malware was injected into the operating system of the machines, causing these to fraudulently dispense currency on the attacker’s command. During the remote attack, malware was installed on the target system via exploited vulnerabilities in the remote management system, most notably the use of default passwords and remote management transmission control protocol (TCP) ports. The attacker then executed the malware, causing the target ATM to dispense a given amount of currency. Jack has also developed software that allows him to remotely send an electric shock to anyone wearing a pacemaker within a 15 metres radius.

World’s first digital weapon

Stuxnet, a highly sophisticated computer worm was discovered in 2010 and was essentially termed the world’s first digital weapon. It was developed by American and Israeli governments, and was used to wreak havoc on an Iranian nuclear facility called Natanz. It targets industrial control systems that are used to monitor and control large-scale industrial facilities like power plants, dams, waste-processing systems and similar operations. It allows attackers to take control of these systems without the operators knowing. Attack using Stuxnet was the first one that allowed hackers to manipulate real-world equipment, thereby making it very dangerous. It was the first computer virus to be able to wreak havoc in the physical world.

A kindle of devices attacked at once

A massive Distributed Denial of Service (DDoS) attack against Dyn, a major domain name system (DNS) provider, broke large portions of the Internet in October 2016, causing significant outage to a ton of websites and services, including Twitter, GitHub, PayPal, Amazon, Reddit, Netflix and Spotify. According to security intelligence firm Flashpoint, Mirai bots were detected driving much, but not necessarily all, of the traffic in the DDoS attacks against DynDNS. Mirai is a piece of malware that targets IoT devices such as routers, security cameras and DVRs, and enslaves vast numbers of these compromised devices into a botnet, which is then used to conduct DDoS attacks. Since the source code of Mirai botnet has already been made available to the public, anyone can wield these attacks against targets.

Not-so-smart refrigerator

White-hat hackers, or ethical computer hackers, at Pen-Test Partners were able to use fake security credentials to intercept communications between the fridge and Google Calendar. Besides the fridge, the hackers also found 25 vulnerabilities in 14 allegedly smartdevices including scales, coffee makers, wireless cameras, locks, home automation hubs and fingerprint readers. The hack was pulled off against RF28HMELBSR smartfridge, part of Samsung’s line-up of Smart Home appliances that can be controlled via their Smart Home app. While the fridge implements SSL, it fails to validate SSL certificates; thereby, enabling man-in-the-middle attacks against most connections.

[td_smart_list_end]

To sum it, the threats are real and our data is prone to attacks. Therefore while using IoT devices make sure that security is built on the foundation of the system and validity checks, authentication, data verification and encryption is carried out frequently.

Hope you enjoy this information please speak with us via comments.

The post Top 5 IoT Hacks appeared first on Tell Me How - A Place for Technology Geekier.

Super Mario Run available on Google Play Store - Tell Me How

Super Mario Run available on Google Play Store - Tell Me How:

Old game legend Super Mario now available on Google Play Store.

Super Mario Run available on Google Play Store

This comes, as tends to be pretty usual in android app releases, simply over three months

Android O features and API you should know - Tell Me How

Android O features and API you should know - Tell Me How:



After launching of Android O many developers and geekier want to know about their features. So do I introduces a variety of latest features and capabilities for users and developers.



Android O features and APIs you should need to know







This document highlights what is new for developers. you can check first developer preview here   Lets discuss with features and API of Android O …

LoopBar Infinite Scrolling for Android

Navigation part is also a important role for user point of view and now a days navigation panel is pretty boring and trivial. Thats why i introduce you our new component named LoopBar in which idea was to make the navigation menu right at fingerprints, in a tab bar. What's more the view has a few specific features that make it stand out from the crowd of similar ones. So, try out the LoopBar library in your app and you’ll see the difference.


Previous article : Add Material Intro Screen in Android
Customers comfort should be priority that is why they provided the ability to place the bar either horizontally or vertically. Thus, it is possible to not only customize the application look but also choose the most efficient user experience.
Cool library : Use Facebook emoji like button in Android


Installation

by gradle :
dependencies {
    compile "com.cleveroad:loopbar:1.1.3"
}
or just download source code given below and import module "LoopBar-widget" to be able to modify the sources

Features

View consist from two parts:
  • A list of your selectable groups
  • Selected view
View can work in three scroll modes: infinite, finite and auto mode. Names of first two speak for itself. In auto mode the list of groups will be infinite if all adapter items didn't fit on screen in other case it will be a static list. Selected view by request could overlay layout on screen on which it placed. Widget has horizontal and vertical layouts and also start or end gravity of selected view.
Compile Android app fast : JRebel for Android



You are allowed to use any RecyclerView adapter, which you want. Concrete infinite scroll logic is fully encapsulated.
Android Studio layouts preview is supported.

Usage

   <com.cleveroad.loopbar.widget.LoopBarView
android:id="@+id/endlessView" android:layout_width="match_parent" android:layout_height="wrap_content" app:enls_placeholderId="@id/placeHolder" app:enls_orientation="horizontal" app:enls_selectionGravity="start" app:enls_selectionMargin="10dp" app:enls_overlaySize="5dp" app:enls_selectionInAnimation="@animator/enls_scale_restore" app:enls_selectionOutAnimation="@animator/enls_scale_small" app:enls_selectionBackground="@android:color/holo_blue_dark" app:enls_menu="@menu/loopbar" app:enls_scrollMode="auto" />
enls_overlaySize & enls_placeholderId are used for overlay feature. Placeholder must be the view lying under the LoopBar. And it's used for setting bounds In layout when selected view has overlay. LoopBar will set width or height for this view by itself (depending of LoopBar orientation), it will be the same as LoopBar has.
Without this placeholder the bounds of LoopBar will be limited by selected view (with overlay). And thanks to placeholder the bounds will be limited only by list of groups. You can see an example of overlay usage in sample.
attribute namedescription
enls_overlaySizea size of selected view overlaying
enls_placeholderIdan id of view on which you should use layout:above or other attributes of RelativeLayouts, because LoopBarView will have increased height in this case. See more in sample
enls_selectionGravitya gravity of selection view. Can be vertical or horizontal. Default horizontal
enls_selectionMargina margin of selectionView from bounds of view. Default 5dp
enls_selectionInAnimationan animation of appearing an icon inside selection view
enls_selectionOutAnimationan animation of hiding an icon inside selection view
enls_selectionBackgroundselection background. Default #ff0099cc
enls_menuan id of menu which will be used for getting title and icon items
enls_scrollModeScrolling mode. Can be infinitefiniteauto. Default infinite
android:backgroundView have yellow background by default. Use standart android:background attribute to change it. Default #ffc829
To initialize items in widget and work with it you should setup adapter to it and add item click mListener:
LoopBarView loopBarView = findViewById(...);
categoriesAdapter = new SimpleCategoriesAdapter(MockedItemsFactory.getCategoryItems(getContext()));
loopBarView.setCategoriesAdapter(categoriesAdapter);
loopBarView.addOnItemClickListener(this);
Here SimpleCategoriesAdapter is used which required collection of ICategoryItem objects (to draw default view with icon and text).
Also you can setup adapter through:

Menu 

Java code (see example MenuLoopBarFragment):

  
       loopBarView.setCategoriesAdapterFromMenu(R.menu.loopbar);
//or Menu menu = ...; loopBarView.setCategoriesAdapterFromMenu(menu);

or via XML:

  
        <com.cleveroad.loopbar.widget.LoopBarView
... app:enls_menu="@menu/loopbar" />

ViewPager

Just set a viewPager into your LoopBar. If you want to show category icons, your ViewPager adapter must implement ILoopBarPagerAdapter interface (see example ViewPagerLoopBarFragment), otherwise the icons will not be shown:
    loopBarView.setupWithViewPager(viewPager);

To customize wrapped RecyclerView (control animations, decorators or add RecyclerView.OnScrollListener) you are able to use following methods:
method namedescription
setItemAnimator(RecyclerView.ItemAnimator animator)Sets the ItemAnimator to wrapped RecyclerView
isAnimating()Returns true if wrapped RecyclerView is currently running some animations
addItemDecoration(RecyclerView.ItemDecoration decor)Add an ItemDecoration to wrapped RecyclerView
addItemDecoration(RecyclerView.ItemDecoration decor, int index)Add an ItemDecoration to wrapped RecyclerView
removeItemDecoration(RecyclerView.ItemDecoration decor)Remove an ItemDecoration from wrapped RecyclerView
invalidateItemDecorations()Invalidates all ItemDecorations in wrapped RecyclerView
addOnScrollListener(RecyclerView.OnScrollListener listener)Add a OnScrollListener to wrapped RecyclerView
removeOnScrollListener(RecyclerView.OnScrollListener listener)Remove a OnScrollListener from wrapped RecyclerView
clearOnScrollListeners()Remove all secondary OnScrollListener from wrapped RecyclerView

Hope you like this post and library and want to download this click here.

Add Material Intro Screen in Android

Whenever we start to creating a Android app we need to focus on their layout and try to make user friendly apps. In my previous article i gave you some cool animation effect which you can use in your any applications. I listed some hand picked animation libraries below :


But whenever user firstly come to your app then first thing is intro screen which is also important for app success point of view and in today tutorial you can get how to add material intro screen in your android applications.



For Material Icon library you can check this tutorial. And if you want full Material UI XML template then check this.
Now we dive in tutorial of Intro Screen with material for Android.

Features

  • Easily add new slides
  • Custom slides
  • Parallax slides
  • Easy extensible api
  • Android TV support!
  • Material design at it's best!!!
We cover four different type of intro slide

Step 1:

Add gradle dependecy
dependencies {
  compile 'agency.tango.android:material-intro-screen:{latest_release}'
}

Step 2:

First, your intro activity class needs to extend MaterialIntroActivity:
public class IntroActivity extends MaterialIntroActivity

Step 3:

Add activity to manifest with defined theme:
<activity
            android:name=".IntroActivity"
            android:theme="@style/Theme.Intro" />

Step 4:

Add slides:
@Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        addSlide(new SlideFragmentBuilder()
                .backgroundColor(R.color.colorPrimary)
                .buttonsColor(R.color.colorAccent)
                .possiblePermissions(new String[]{Manifest.permission.CALL_PHONE, Manifest.permission.READ_SMS})
                .neededPermissions(new String[]{Manifest.permission.CAMERA, Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION})
                .image(agency.tango.materialintroscreen.R.drawable.ic_next)
                .title("title 3")
                .description("Description 3")
                .build(),
                new MessageButtonBehaviour(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        showMessage("We provide solutions to make you love your work");
                    }
                }, "Work with love"));
}

Explanation of SlideFragment usage:


  • possiblePermissions ⇾ permissions which are not necessary to be granted
  • neededPersmissions ⇾ permission which are needed to be granted to move further from that slide
  • MessageButtonBehaviour ⇾ create a new instance only if you want to have a custom action or text on a message button

Step 5:

Customize Intro Activity:

  • setSkipButtonVisible() ⇾ show skip button instead of back button on the left bottom of screen
  • hideBackButton() ⇾ hides any button on the left bottom of screen
  • enableLastSlideAlphaExitTransition() ⇾ set if the last slide should disapear with alpha hiding effect

Customizing view animations:
You can set enter, default and exit translation for every view in intro activity. To achive this you need to get translation wrapper for chosen view (for example: getNextButtonTranslationWrapper()) and set there new class which will implement IViewTranslation
getBackButtonTranslationWrapper()
                .setEnterTranslation(new IViewTranslation() {
                    @Override
                    public void translate(View view, @FloatRange(from = 0, to = 1.0) float percentage) {
                        view.setAlpha(percentage);
                    }
                });
Available translation wrappers:

  • getNextButtonTranslationWrapper()
  • getBackButtonTranslationWrapper()
  • getPageIndicatorTranslationWrapper()
  • getViewPagerTranslationWrapper()
  • getSkipButtonTranslationWrapper()

Custom slides

Of course you are able to implement completely custom slides. You only need to extend SlideFragment and override following functions:

  • backgroundColor()
  • buttonsColor()
  • canMoveFurther() (only if you want to stop user from being able to move further before he will do some action)
  • cantMoveFurtherErrorMessage() (as above)

If you want to use parallax in a fragment please use one of the below views:
ParallaxFrameLayout
ParallaxLinearLayout
ParallaxRelativeLayout
And set there the app:layout_parallaxFactor attribute:
<agency.tango.materialintroscreen.parallax.ParallaxLinearLayout
xmlns:android="http://schemas.android.com/apk/res/android">

    <ImageView
        android:id="@+id/image_slide"
        app:layout_parallaxFactor="0.6"/>
That's it. Hope you like this tutorial and download this demo with full source code here.

Candle Powered USB Charger Lamp

Here’s a tutorial that would teach you how to harvest the heat of candles to charge USB devices and at the same time use it as a candle lamp!

Add FoldingTab Bar and Menu in Android

In current market, Mobile app is on hike and the major success of app is their UI design, no matter it is Android or iOS application. In my previous article i share some cool UI design with their code implementation and today also i share a cool code of UI for Tab bar and menu is called FoldingTab bar and Folding menu in Android. But before going ahead you should know about Common 10 Mistakes by Android Developer which we cover in previous article.
You should also friendly with Bad features of Java. Now we dive with this cool library but firstly know about what is it ?
A sort of UI revolution in android development is going on recently. ready for it?
Google finally added a bottom tab bar as a suggested style pattern for android development!

Add FoldingTab Bar and Menu in Android

Obviously, there aren't any tab bar components by Google within the support libraries yet. Therefore we decided that it’s time to bring our legendary FoldingTabBar to android – before 2017 arrives.

FoldingTabBar to android

How to use this FoldingTabBar library

Requirements

Android SDK 19+

Usage

Add to your root build.gradle:
allprojects {
    repositories {
    ...
    maven { url "https://jitpack.io" }
    }
}

Add the dependency:

dependencies {
    compile 'com.github.Yalantis:OfficialFoldingTabBar.Android:v0.9'
}
It’s very simple. On Android we have the @menu resource type. We can think of FoldingTabBar as a menu. Let’s create our menu file:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/ftb_menu_nearby"
        android:icon="@drawable/ic_nearby_icon"
        android:title="Nearby"/>
 
    <item
        android:id="@+id/ftb_menu_new_chat"
        android:icon="@drawable/ic_new_chat_icon"
        android:title="Chat"/>
 
    <item
        android:id="@+id/ftb_menu_profile"
        android:icon="@drawable/ic_profile_icon"
        android:title="Profile"/>
 
    <item
        android:id="@+id/ftb_menu_settings"
        android:icon="@drawable/ic_settings_icon"
        android:title="Settings"/>
 
</menu>
Looks good. This is the menu that you’re using for dialogs, toolbar menus, or the navigation drawer.

You can add this also : PanoramaImageView in Android

The coolest thing is that you can easily switch from the navigation drawer to our FoldingTabBar. Or you can use both menus simultaneously on the same screen.

 Here’s an example of how you can implement this FoldingTabBar into your layout file:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    android:id="@+id/activity_main"
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/colorAccent"
    tools:context="client.yalantis.com.foldingtabbarandroid.MainActivity">
 
    <android.support.v4.view.ViewPager
        android:id="@+id/viewPager"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    </android.support.v4.view.ViewPager>
 
    <client.yalantis.com.foldingtabbar.FoldingTabBar
        android:id="@+id/folding_tab_bar"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="@dimen/activity_horizontal_margin"
        android:layout_centerInParent="true"
        android:layout_alignParentBottom="true"
        app:menu="@menu/menu_tab_bar"/>
</RelativeLayout>
As you can see, we have some custom attributes. The main and required attribute is app:menu – here you can link your menu file to our component.
There are also some additional attributes:

  • app:itemPadding - sets padding for your menu items. Default item padding is 17dp.
  • app:mainImage - here you can link your image resource for the main image.
  • app:selectionColor - our menu supports color selection. You can change the menu’s color here.

This menu is flexible, so you can use wrap_content or hard-coded sizes. When you’re using wrap_content, the size will equal 70dp.

How to use our FoldingTabBar in Java code

Here we have two interfaces. The first works when your menu item is pressed:
tabBar.setOnFoldingItemClickListener(new FoldingTabBar.OnFoldingItemSelectedListener() {
            @Override
            public boolean onFoldingItemSelected(@NotNull MenuItem item) {
                switch (item.getItemId()) {
                    case R.id.ftb_menu_nearby:
                        mViewPager.setCurrentItem(0);
                        break;
                    case R.id.ftb_menu_new_chat:
                        mViewPager.setCurrentItem(1);
                        break;
                    case R.id.ftb_menu_profile:
                        mViewPager.setCurrentItem(2);
                        break;
                    case R.id.ftb_menu_settings:
                        mViewPager.setCurrentItem(3);
                        break;
                }
                return false;
            }
        });
The second works when a user presses the home button:
tabBar.setOnMainButtonClickListener(new FoldingTabBar.OnMainButtonClickedListener() {
            @Override
            public void onMainButtonClicked() {
               
            }
        });
We created two interfaces instead of one because this corresponds with the Interface Segregation principle (from SOLID).

Technology stack

We chose Kotlin as the language for our library. We already have a few components in Kotlin; we love Kotlin because it’s a powerful language that makes it much more fun to develop apps than Java does.

Collections

Here we’re using some functional “magic” of Kotlin collections:
mData = mMenu.visibleItems.map {
            initAndAddMenuItem(it)
        }
Also, note that we’ve used forEach instead of for loops.

Null Safety

This fantastic feature of Kotlin is used everywhere across our library (where needed, of course). Now our code is much cleaner and more understandable.
Lambda functions
We’ve only had this feature in Java since version 8. But Java 8 is not yet ready for Android. In Kotlin we have this feature by default.
rotationAnimator.addUpdateListener {
            valueAnimator ->
            val value = valueAnimator.animatedValue as Float
            mainImageView.rotation = value
        }
Really beautiful, isn’t it?

Apply function

The apply function defines an extension function for all types. When you invoke the apply function, it calls the closure passed as a parameter and then returns the receiver object that the closure ran on. This is an amazing feature!
val scalingAnimator = ValueAnimator.ofInt(mSize, destWidth).apply {
            addUpdateListener(scaleAnimator)
            addListener(rollUpListener)
        }

Animations

We’re using different ValueAnimators and, of course, AnimationSets for playing our animators together. Obviously, we made our own interpolator:
internal class CustomBounceInterpolator(val amplitude: Double = 0.1,
                                        val frequency: Double = 0.8) : Interpolator {
 
    override fun getInterpolation(time: Float): Float {
        return (-1.0 * Math.exp(-time / amplitude) *
                Math.cos(frequency * time) + 1).toFloat()
    }
}
That’s all about the technologies. If you've have any problem then you can download this library with demo.

Google Hangout new Avatar after ovetake Slack

If you know something regarding Google’s messaging strategy within the previous few years, you recognize that it’s been a little of a mess. Allo, the consumer app, launched without the cross-platform options users expect. Text messaging on mobile is involved in inter-carrier warfare. And Hangouts has become a punchline.

Google Hangout new Avatar after ovetake Slack

But currently there are a few of recent wrinkles within the Hangouts story. Google is splitting Hangouts into two: Hangouts Chat, that is clearly gunning for Slack, and Hangouts Meet, that is all concerning video and audio communications. Those two are primarily the enterprise counterparts to Allo and duo.

PhotoScan - A new Google Photo feature

Meet is currently typically available. Hangout Chat goes into Google’s early access program.

 Hangout Chat

A amazingly rich FEATURE SET AT LAUNCH

Hangouts Chat can still provide direct one-on-one chats, and it'll additionally still work natively on the web, Android, and iOS. However the new group chat rooms — that also provide threaded messages — are maybe the biggest move the app has made since its launch in 2013.

Why Google Pixel replace Nexus and iPhone 7

A amazingly rich FEATURE SET AT LAUNCH

GOOGLE DOCS INTEGRATION IS HANGOUTS’ MAIN DIFFERENTIATOR

The core features of Hangouts Chat play on Google’s strengths. It’s deeply integrated into Google Docs and Sheets — and may assign document permissions automatically supported the team that created them. As you would possibly expect, Google is also touting the search options inside the app. It'll allow you to filter by rooms, people, file types, or maybe links that were dropped within the room.

GOOGLE DOCS INTEGRATION IS HANGOUTS’ MAIN DIFFERENTIATOR

BETTER VIDEO CHAT

Speaking of conferences, Hangouts Chat can integrate with a big upgrade to the Hangouts video chat service, currently dubbed “Hangouts Meet.” (Yes, the naming is confusing and dumb.) Google says that the new video chat are going to be a lot of less likely to spike your processor or grind your pc to a halt.

BETTER VIDEO CHAT


The lighter-weight version of the app apparently means up to thirty participants will be a part of. There's no need to install a plugin on Chrome or Firefox, although each Microsoft Edge and Apple’s safari can still require one until they recreate and support the web RTC standard.

Use Facebook emoji like button in Android

Facebook has expanded its Like button. The six emoji-alternatives, called “Reactions,” give Facebook users an extended palette of emotions and you also want to implement this feature in your android app. Then just dive with us in code.

Game on Emoji : HungerMoji - Android Notification Game [Source Code]

Just like Facebook's app:


  • long press on like button
  • keep your finger down, swipe left or right
  • release your finger

Demo



Step 1. Get it with

allprojects {
    repositories {
        maven { url "https://jitpack.io" }
        ...
dependencies {
    compile 'com.github.andob:emojilike-android:beta2'
...

Step 2. Setup your "emoji-like" activity

This library uses the activity to detect touch events, to prevent sending touch events to RecyclerView/ListView/ScrollView when the EmojiLikeView is visible on screen (when you select an emoji, you can move your finger up/down and the activity will prevent the scrolling view to scroll).
Thus, you will need to extend a class called ActivityWithEmoji
public class FragmentActivitySample extends ActivityWithEmoji
{
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        .....
OR without extending,

public class MainActivity extends AppCompatActivity implements IActivityWithEmoji
{
    EmojiLikeTouchDetector emojiLikeTouchDetector;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        .....
        emojiLikeTouchDetector=new EmojiLikeTouchDetector();
        .....
    }

    //override theese 2 methods if your activity doesn't extend ActivityWithEmoji
    @Override
    public boolean dispatchTouchEvent(MotionEvent event)
    {
        boolean shouldCallSuper=emojiLikeTouchDetector.dispatchTouchEvent(event);
        if (shouldCallSuper)
            return super.dispatchTouchEvent(event);
        return false;
    }

    @Override
    public void configureEmojiLike(EmojiConfig config)
    {
        emojiLikeTouchDetector.configure(config);
    }
}

Step 3. Define EmojiLikeView in XML

You can put an EmojiLikeView whereever you want, in an activity, fragment, an item from an adapter (for RecyclerViews or ListViews), etc.

You just need to define the "trigger" view (=the like button, the button that, once long pressed, the view with emojis will be visible on screen)
<TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Like"
        android:id="@+id/likeButton" ....../>
And the view with emojis:
<ro.andreidobrescu.emojilike.EmojiLikeView
        android:layout_width="match_parent"
        android:layout_height="110dp"
        android:id="@+id/emojiView"
        android:layout_alignBottom="@+id/likeButton"
        android:layout_marginBottom="10dp"/>
Then get them in your activity/fragment/list cell/etc.

Step 4. Configure the emojis

When the activity/fragment/list cell is created, use EmojiConfig class to configure how emojis will behave. Pass a reference to the context to "with" metod (the context will need to implement IActivityWithEmoji or extend ActivityWithEmoji as described above), the "trigger" view to "on" method, and the EmojiLikeView to "open" method. Then, use addEmoji to add emoji objects (with picture and description).

With this class you can personalize the EmojiLikeView, the in and out animation, background image, margins, delays. There is no default background image (the image behind emojis) or in/out animations, so you will probably need to set them as below.
//in onCreate/onCreateView/onBindViewHolder/etc
EmojiConfig.with(this)
    .on(likeButton)
    .open(emojiView)
    .addEmoji(new Emoji(R.drawable.like, "Like"))
    .addEmoji(new Emoji(R.drawable.haha, "Haha"))
    .addEmoji(new Emoji(R.drawable.kiss, "Kiss"))
    .addEmoji(new Emoji(R.drawable.sad, "Sad"))
    .addEmoji(new Emoji(R.drawable.t, ":P"))
    .setEmojiViewInAnimation((AnimationSet)AnimationUtils.loadAnimation(this, R.anim.in_animation))
    .setEmojiViewOutAnimation((AnimationSet) AnimationUtils.loadAnimation(this, R.anim.out_animation))
    .setBackgroundImage(R.drawable.background_drawable)
    .setOnEmojiSelectedListener(new OnEmojiSelectedListener() {
        @Override
        public void onEmojiSelected(Emoji emoji) {
            Toast.makeText(getContext(), "Selected " + emoji.getDescription(), Toast.LENGTH_SHORT).show();
        }
    })
    .setup();
For more info look at the source code of sample project.