Chrome Custom Tabs Integration – SUSI.AI Android App

Earlier, we have seen the apps having external links that opens and navigates the user to the phone browser when clicked, then we came up with something called WebView for Android, but nowadays we have shifted to something called In-App browsers. The main drawback of the system/ phone browsers are they caused heavy transition. To overcome this drawback “Chrome Custom Tabs” were invented which allowed users to walk through the web content seamlessly. SUSI.AI Android App earlier used the system browser to open any link present in the app. This can be implemented easily by Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); startActivity(browserIntent); This lead to a huge transition between the context of the app and the web browser. Then, to reduce all the clutter Chrome Custom tabs by Google was evolved which drastically increased the loading speed and the heavy context switch was also not taking place due to the integration and adaptability of custom tabs within the app. Chrome custom tabs also are very secured like Chrome Browser and uses the same feature and give developers a more control on the custom actions, user interface within the app. Ref : Android Dev - Chrome Custom Tabs Integration of Chrome Custom Tabs Adding the dependency in build.gradle(app-level) in the project dependencies {    //Other dependencies    compile 'com.android.support:customtabs:23.4.0' } Now instantiating a CustomTabsIntent Builder String url = “https://www.fossasia.org” // can be any link CustomTabsIntent.Builder builder = new CustomTabsIntent.Builder(); //custom tabs intent builder CustomTabsIntent customTabsIntent = builder.build(); We can also add animation or customize the color of the toolbar or add action buttons. builder.setColor(Color.RED) //for setting the color of the toolbar builder.setStartAnimations(this, R.anim.slide_in_right, R.anim.slide_out_left); //for start animation builder.setExitAnimations(this, R.anim.slide_in_left, R.anim.slide_out_right); //for exit animation Finally, we have have achieved everything with a little code. Final launch the web page Uri webpage = Uri.parse(url); //We have to pass an URI customTabsIntent.launchUrl(context, webpage); //launching through custom tabs Benefits of Chrome Custom Tabs UI Customization are easily available and can be implemented with very few lines of code.  Faster page loading and in-app access of the external link  Animations for start/exit   Has security and uses the same permission model as in chrome browser. Resources Chrome Custom Tabs:  https://developer.chrome.com/multidevice/android/customtabs Chrome Custom Tabs Github Repo: GitHub - GoogleChrome/custom-tabs-client: Chrome custom tabs Android Blog: Android Developers Blog: Chrome custom tabs smooth the transition Video: Chrome Custom Tabs: Displaying 3rd party content in your Android  

Continue ReadingChrome Custom Tabs Integration – SUSI.AI Android App

Leak Canary in Phimpme Android

Leak Canary is a memory detection library for Android and Java. A memory leak occurs when you hold an object for too long after its purpose has been served. If some object is holding another object then the Garbage collector will not be able to collect and this is known as Memory Leak. These memory leaks can be minor (in KB’s) or can lead to an app in ANR state with OutOfMemoryError.Hence to recover and capture this memory leak, Leak Canary is used for Android and Java. For every functioning done in android, the system needs resource such as memory. Hence in Java the Garbage Collector(GC) plays a major role in deallocating the memory. The GC is mainly used to reclaim memory. Now the question arises, why do we need a memory leak detection library when GC is already present. The answer is sometimes the developers makes programming mistakes and that leads to inhibit the GC to collect the objects that are of no use and mark them as useful objects. The GC starts from one point(root) and marks active to all the objects that holds references from GC root and the objects which are not marked are wiped out of memory.Hence when some unuseful objects is marked active, memory leak occurs.Hence to eliminate these problems  of memory leaks, we have employed the use of Leak Canary in our project. The Phimpme project and every related project has possible memory leaks, like for instance we have used fragments in settings activity and to catch that memory leak we have added the refwatcher instance. Hence if any memory leaks occur we get the error such as ‘org.fossasia.phimpme’  leaked 40kb.This can also be checked by Leaks App in the android phone, which has features of showing and sharing the heap dump and info. To add the Leak Canary in your android app, follow these steps: Add the dependencies in build.gradle(app level) dependencies { debugCompile 'com.squareup.leakcanary:leakcanary-android:1.5.4' releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.5.4' } Add the following code to your Application class public class MyApplication extends Application{ @Override public void onCreate() { if (LeakCanary.isInAnalyzerProcess(this)) { // This process is dedicated to LeakCanary for heap analysis. // You should not init your app in this process. return; } LeakCanary.install(this); } Leak canary now will automatically detect the memory leaks  from all activities. For fragment a refwatcher is needed, hence public class MYFragment extends Fragment { ... @Override public void onDestroy() { super.onDestroy(); MainApplication.getRefWatcher(getActivity()).watch(this); } } Hence LeakCanary is setup finally, and now the memory leaks will be detected. Resources How to fix memory leaks in Android, Desmond Lua: https://code.luasoftware.com/tutorials/android/how-to-fix-memory-leaks-in-android/ Leak Canary on Github: https://github.com/square/leakcanary  

Continue ReadingLeak Canary in Phimpme Android