Showing posts with label tips. Show all posts
Showing posts with label tips. Show all posts

Wednesday, October 12, 2016

Android Viewpager Wait Fragment Finish Load

After several attempt on how to wait all the fragment in view pager is loaded, i came out a solution where i create interface class to communicate between activity and the fragment..
  1. Create Interface Class
  2. Implement it on Activity class
  3. Call it from each fragment at the off each process

Change Snippet Background Color



Create Interface as bridge between fragment and activity

public interface OnFragmentFinishLoad {
    public void onFinish(String tag,boolean state);
}
 

Now Create Activity Class contain Viewpager.. (Code not complete)

public class PizzaActivity extends BaseActivity implements OnFragmentFinishLoad {

   @BindView(R.id.cover_rl)
 
   protected RelativeLayout cover_rl;

   int countLoad = 0;

   @Override
 public void onCreate(Bundle savedInstanceState) {

      super.onCreate(savedInstanceState);

      setContentView(R.layout.activity_carte_tab_layout);
      cover_rl.setVisibility(View.VISIBLE);


      setupViewPager(viewPager);

      mTabLayout.setupWithViewPager(viewPager);

      setupTabLayout(mTabLayout);

      ……
   }

   @Override
 public void onFinish(String tag, boolean state) {

      if (state)
 
         countLoad++;

      
      //cat.size() is the number of fragment in view pager.
      //each time fragment trigger this function, there will return true and countLoad will increase
      //if number of true == cat.size() the loading will disappear
  

      if (countLoad == cat.size() - 1) {

         cover_rl.setVisibility(View.GONE);

      }

   }
}
 
Then, Create Fragment class, 

public class PizzaFragment extends BaseFragment {

   @Override
 
   public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

      return inflater.inflate(R.layout.default_fragment, container, false);

   }

   @Override
 
   public void onViewCreated(View view, Bundle savedInstanceState) {

       super.onViewCreated(view, savedInstanceState);

       ...
       ...

       
       //run task
       new AsyncDataTaskPizza().execute();
   }

   private class AsyncDataTaskPizza extends AsyncTask < Void, Void, Void > {
      @Override
 
      protected void onPreExecute() {

         super.onPreExecute();

      }

      @Override
      protected Void doInBackground(Void... params) {
           //HTTP Call or else
      }

      @Override
 
      protected void onPostExecute(List < PizzaDetail > result) {

          // call this function after finish load everything
          ((OnFragmentFinishLoad) getActivity()).onFinish(null, true);

      }
   }

}
 
Create other Fragment class, do like the same or something else but last process must end with ((OnFragmentFinishLoad) getActivity()).onFinish(null, true);


This is how i manage and i found that more easier to listen when all fragment in ViewPager is finish loading.  :D

Create different keystore for different flavour in Gradle Android

My current Android projects has a lot of flavors, and each flavor has different keystore to sign with. As a result it has very long build.gradle project file. As each flavor need defining separate singningConfig and defining flavor signing on release buildType. After reading couple of articles, i end up with this solution:


Change Snippet Background Color



1. Modify signingConfigs to fit with difference signing keystore for each flavour like example below
 
   // create 2 or more difference keystore.
    signingConfigs {
        
        configFirst {
            keyAlias KEY_ALIAS_MY
            keyPassword STORE_PASSWORD_MY
            storeFile file('../keystore_my.jks')
            storePassword KEY_PASSWORD_MY
        }

        configSecond {
            keyAlias KEY_ALIAS_SG
            keyPassword STORE_PASSWORD_SG
            storeFile file('../keystore_sg.jks')
            storePassword KEY_PASSWORD_SG
        }

        .....

        debug{

        }
    }
     

2. This is example of flavour. based on this example, only SGPROD and MYPROD i assign it to their own keystore. That's all as easy 123.. :D
    
    productFlavors{

        SGPROD{
            applicationId "com.mobile.sg"
            buildConfigField 'String', 'URL_LINK',SG_URL_PROD;
            buildConfigField 'String', 'URL_API',SG_API_PROD;
            
            //assign this flavour with signingConfigs configSecond
            signingConfig signingConfigs.configSecond
        }


        SGDEV{
            applicationId "com.mobile.sg.dev"
            buildConfigField 'String', 'URL_LINK',SG_URL_DEBUG;
            buildConfigField 'String', 'URL_API',SG_API_DEBUG;
        }

        MYPROD{
            applicationId "com.mobile.my"
            buildConfigField 'String', 'URL_LINK',MY_URL_PROD;
            buildConfigField 'String', 'URL_API',MY_API_PROD;

            //assign this flavour with signingConfigs configFirst
            signingConfig signingConfigs.configFirst
        }

        MYDEV{
            applicationId "com.mobile.my.dev"
            buildConfigField 'String', 'URL_LINK',MY_URL_DEBUG;
            buildConfigField 'String', 'URL_API',MY_API_DEBUG;
        }
    }

    

Sunday, September 25, 2016

How To Hide Keys in Android


Android apps which make RESTful calls typically need to supply an api key when making HTTP requests. Ideally, you wanna create an Android app that uses Twitter APIs, so yo need an API key and an API secrets only you and your apps know. Because you need these values inside you app, it’s easy and quick to write them down directly in your source code. But when you commit this code to GitHub (or any other public repo), practically you’re telling your secret keys to entire world. Seems uncommon??

For example, if you declare in code

private static final String API_KEY = “123456abc”;
private static final String API_URL = “https://your-domain-api.com/api/”;

and push your changes to a public git repo, your api key is now known to everyone. Other developers could re-use it.

One simple way to avoid this bad practice is to store your values inside an environmental variable, so only your machine knows it, then read this values in some way and inject them in your code at build time. For best way where i can find is hiding your keys inside gradle.properties

Where to find gradle.properties
  1. Show Hidden files
  2. Find .gradle folder in ~/Users and Click it
  3. You will find gradle.properties file inside .gradle folder. If not exist, then create new file name gradle.properties
  4. Then store anything that you want inside it. See below example:

Note (Warning): 
  1. Amend your .gitignore file to exclude gradle.properties from version control /gradle.properties
  2. Remove your gradle.properties file from your remote git repo, if it exists.

How to use the .gradle.properties global variable

Just call the name inside the build.gradle

for example:

signingConfigs {


    release {

        storeFile file('../yourkeystore.keystore')

        storePassword PROJECT_STORE_PASSWORD

        keyAlias PROJECT_KEY_ALIAS

        keyPassword PROJECT_KEY_PASSWORD

    }


    debug{



    }

}

buildConfigField 'String','SECRETKEY',PROJECT_API_SECRET
buildConfigField 'String','URL_API',PROJECT_URL_API_DEBUG

Then if you want to call the buildConfigField inside your code : BuildConfig.URL_API to get the value in gradle.properites



That’s all, then it’s up to you how to create more elaborated configurations. 

Sunday, August 14, 2016

Best Application to learn Difference Programming Languages Fast


App Name: Programming Hub
Package Name: com.freeit.java
Category: Education
Developer : Nexino Labs Pvt Ltd
Version: 3.0.6
Publish Date: July 30, 2016
File Size: Undefined
Installs: 1,000,000 - 5,000,000
Requires Android: 4.1 and up
Content Rating: Everyone
Developer: Visit website Email contactus@prghub.com


This is the best Application for me to Learn 18+ Programming languages such as Python, Assembly, HTML, VB.NET, C, C++, C# (CSharp), JavaScript, PHP, Ruby, R Programming, CSS, Java programming and much more! The new UI is quite interesting with new Material Design include the built-in playground where you can test your code in one app :D

With this app, i think is fastest way to learn any programming language by referring ready made programs and theory created by programming experts. Just download the language you want to learn or just request to the developer on what language you want or solutions.

Have an exam tomorrow?? :D No worries! By this app, forget your 600 page textbooks! Simply read this app essential and very precise reference material to score awesome marks!

Below is the Screenshot of this lastest app





Sunday, July 31, 2016

Native, HTML5 & Hybrid App: WHICH IS BETTER TO MAKE AN APP?


Mobile apps have grown the requirement of the hour & each and every top app development companies are starting really very difficult to make a complete app for their company that would consequently boost their sales. There is a lot of curious and confused entrepreneurs who go crazy trying to decide on how to approach their Mobile App. If you’re confused and wondering whether to build a hybrid mobile app or a native mobile app, don’t worry, this article will help you decide your mobile app strategy.





First of all some stats:

79,4% of all mobile devices use Android
16,4% of all mobile devices use iOS

Source - Forbes.com


Overview:

Native Apps:
  • Native apps are smartphone and tablet applications developed precisely for a specific mobile operating system. For iOS we usually use Swift and for Android we use Java. and have full potential of the platform can be leveraged which will drive great user experience and larger app capabilities (especially around phone hardware). Can be pricey based on requirement and take longer to develop. 

HTML 5 Apps:
  • HTML apps use industry standard technologies like Java, CSS & HTML5. This way to the mobile app development creates cross-platform mobile apps that are fit with multiple devices and responsive.

Hybrid Apps:
  • Hybrid apps are basically web apps hidden behind a native app shell. They are cross-platform and can be immediately distributed between app stores without the need to develop two different versions for  Android and iOS. Most of hybrid apps are built using cross-compatible web technologies (HTML5, CSS, Javascript etc.) and then they are wrapped in a native app using platforms such as Cordova

Thursday, September 24, 2015

What is the programming competition?

What is the programming competition?

The programming competition is just that, a competition during which teams compete by attempting to code correct solutions to as many of the problems that they can within 5 hours. The problems are not just 'undergrad assignment' questions, they are scenarios that will require you to develop a non-trivial algorithm that correctly simplifies the problem into a form that can be solved very quickly (solutions must generally be able to solve a multi-thousand solution in under 3 minutes).



Why should i join programming competition

Aside from ego, pride or otherwise acquired bragging rights, the is also a very good opportunity to develop your skills of problem solving under pressure which every person this side of the wilderness will need to have throughout their life style. Understanding how you came to a given solution and even understanding why that solution was wrong (or inelegant), can help you to develop your problem solving skills. By reading only textbook you will never improved yourself. 

Student/people usually will think that "oh man, that sounds hard". Actually, it is and it isn't. The most common misconception is that you need to be a 'wizard' coder to do well.  In fact, many successful teams bring with them printed notes of how to perform the more tedious coding tasks so that they can spend their time working on finding a good solution rather than wasting it trying to remember the correct algorithm for a depth-first search.


Team Strategy Tips

  1. If you are not sure about your solution, discuss it with your teammates. If stuck, explain problem to a teammate. Use good judgement if it is worth the interruption of him/her.
  2. If you are stuck on a problem, take a walk or go to the toilet. The best ideas come to mind here.
  3. Look at the scoreboard every now and then. If there is a problem that many other teams solved, it should be easy.
  4. Usually there are 10 question. Split every question with your teammate, read and choose the easiest one.
  5. Discus with your teammate who is the coder, who is thinker and who is the algorithmer.
  6. Don't spend to much time on one question. Try to solve other while your teammate think another solution.
  7. When you are done with a problem, separate it. Don't mess your table.
  8. Eat to release tension..that is i always do. 


Hint

I am too not a expert in this, but I would recommend the following things according to my experiences :

  1. Choose a programming language you are going to use in all the competitions. I would say the best choice is Java because java have a lot of library that i can use and easy to remember rather than hard coder.
  2. Learn algorithm such as Sorting, Searching, Combination, Permutation, Graph, Palindrome, Bruce force, Dynamic Programming, etc..
  3. Mathematics algorithm also important such as Algebra, Summation, Cubic, Angle and etc But it is not necessary for me. 
  4. For people using Java as their programming language, i use library such as StringBuilder, BigInteger, HashMap, Scanner, BufferedReader, Math, Arrays, HashMap, Vector, String, Character. Its really help me.
  5. Get some theoretical knowledge of algorithms. Book written by Steven Halim shows you how to solve problem in vary such way.  It contains pretty much all the algorithms, math and data structures you need to know for programming competitions.
  6. Go to website called Hackerearth, Hackerrank, Codechef or else, they provide platform where you can practice to solve the problem provided.