Android Open Source - AndroidInstagram Main Activity






From Project

Back to project page AndroidInstagram.

License

The source code is released under:

Apache License

If you think the Android project AndroidInstagram listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package net.londatiga.android.example;
// www  .  ja v a  2  s .  com
import java.net.URL;
import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;

import net.londatiga.android.instagram.Instagram;
import net.londatiga.android.instagram.InstagramRequest;
import net.londatiga.android.instagram.InstagramSession;
import net.londatiga.android.instagram.InstagramUser;

import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONArray;
import org.json.JSONObject;
import org.json.JSONTokener;

import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.View;
import android.widget.Button;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;

import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import com.nostra13.universalimageloader.core.display.FadeInBitmapDisplayer;
import com.nostra13.universalimageloader.core.listener.SimpleImageLoadingListener;

/**
 * Instagram authentication.
 *  
 * @author Lorensius W. L. T
 *
 */
public class MainActivity extends Activity {
  private InstagramSession mInstagramSession;
  private Instagram mInstagram;
  
  private ProgressBar mLoadingPb;
  private GridView mGridView;
  
  private static final String CLIENT_ID = "your client id";
    private static final String CLIENT_SECRET = "your client secret";
    private static final String REDIRECT_URI = "your redirect uri";  
  
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    
    mInstagram      = new Instagram(this, CLIENT_ID, CLIENT_SECRET, REDIRECT_URI);
    
    mInstagramSession  = mInstagram.getSession();
    
    if (mInstagramSession.isActive()) {
      setContentView(R.layout.activity_user);
      
      InstagramUser instagramUser = mInstagramSession.getUser();
      
      mLoadingPb   = (ProgressBar) findViewById(R.id.pb_loading);
      mGridView  = (GridView) findViewById(R.id.gridView);
      
      ((TextView) findViewById(R.id.tv_name)).setText(instagramUser.fullName);
      ((TextView) findViewById(R.id.tv_username)).setText(instagramUser.username);
      
      ((Button) findViewById(R.id.btn_logout)).setOnClickListener(new View.OnClickListener() {        
        @Override
        public void onClick(View arg0) {
          mInstagramSession.reset();
          
          startActivity(new Intent(MainActivity.this, MainActivity.class));
          
          finish();
        }
      });
      
      ImageView userIv = (ImageView) findViewById(R.id.iv_user);
      
      DisplayImageOptions displayOptions = new DisplayImageOptions.Builder()
          .showImageOnLoading(R.drawable.ic_user)
          .showImageForEmptyUri(R.drawable.ic_user)
          .showImageOnFail(R.drawable.ic_user)
          .cacheInMemory(true)
          .cacheOnDisc(false)
          .considerExifParams(true)
          .build();
    
      ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(this)                                           
              .writeDebugLogs()
              .defaultDisplayImageOptions(displayOptions)            
              .build();
    
      ImageLoader imageLoader = ImageLoader.getInstance();
      imageLoader.init(config);
      
      AnimateFirstDisplayListener animate  = new AnimateFirstDisplayListener();
      
      imageLoader.displayImage(instagramUser.profilPicture, userIv, animate);
      
      new DownloadTask().execute();
      
    } else {
      setContentView(R.layout.activity_main);
      
      ((Button) findViewById(R.id.btn_connect)).setOnClickListener(new View.OnClickListener() {      
        @Override
        public void onClick(View arg0) {          
          mInstagram.authorize(mAuthListener);  
        }
      });
    }
  }
  
  private void showToast(String text) {
    Toast.makeText(getApplicationContext(), text, Toast.LENGTH_LONG).show();
  }
  
  private Instagram.InstagramAuthListener mAuthListener = new Instagram.InstagramAuthListener() {      
    @Override
    public void onSuccess(InstagramUser user) {
      finish();
      
      startActivity(new Intent(MainActivity.this, MainActivity.class));
    }
          
    @Override
    public void onError(String error) {    
      showToast(error);
    }

    @Override
    public void onCancel() {
      showToast("OK. Maybe later?");
      
    }
  };
      
  public static class AnimateFirstDisplayListener extends SimpleImageLoadingListener {

    static final List<String> displayedImages = Collections.synchronizedList(new LinkedList<String>());

    @Override
    public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
      if (loadedImage != null) {
        ImageView imageView = (ImageView) view;
        boolean firstDisplay = !displayedImages.contains(imageUri);
        if (firstDisplay) {
          FadeInBitmapDisplayer.animate(imageView, 500);
          displayedImages.add(imageUri);
        }
      }
    }
  }
  
  public class DownloadTask extends AsyncTask<URL, Integer, Long> {
    ArrayList<String> photoList;
    
    protected void onCancelled() {
      
    }
    
      protected void onPreExecute() {
        
      }
    
        protected Long doInBackground(URL... urls) {         
            long result = 0;
      
        try {
          List<NameValuePair> params = new ArrayList<NameValuePair>(1);
          
          params.add(new BasicNameValuePair("count", "10"));
          
          InstagramRequest request = new InstagramRequest(mInstagramSession.getAccessToken());
          String response       = request.createRequest("GET", "/users/self/feed", params);
          
          if (!response.equals("")) {
            JSONObject jsonObj  = (JSONObject) new JSONTokener(response).nextValue();            
            JSONArray jsonData  = jsonObj.getJSONArray("data");
            
            int length = jsonData.length();
            
            if (length > 0) {
              photoList = new ArrayList<String>();
              
              for (int i = 0; i < length; i++) {
                JSONObject jsonPhoto = jsonData.getJSONObject(i).getJSONObject("images").getJSONObject("low_resolution");
                
                photoList.add(jsonPhoto.getString("url"));
              }
            }
          }
        } catch (Exception e) { 
          e.printStackTrace();
        }
        
            return result;
        }

        protected void onProgressUpdate(Integer... progress) {                
        }

        protected void onPostExecute(Long result) {
          mLoadingPb.setVisibility(View.GONE);
          
          if (photoList == null) {
            Toast.makeText(getApplicationContext(), "No Photos Available", Toast.LENGTH_LONG).show();
          } else {
            DisplayMetrics dm = new DisplayMetrics();
            
            getWindowManager().getDefaultDisplay().getMetrics(dm);
                 
            int width   = (int) Math.ceil((double) dm.widthPixels / 2);
            width=width-50;
            int height  = width;
          
            PhotoListAdapter adapter = new PhotoListAdapter(MainActivity.this);
            
            adapter.setData(photoList);
            adapter.setLayoutParam(width, height);
          
            mGridView.setAdapter(adapter);
          }
        }                
    }
}




Java Source Code List

net.londatiga.android.example.MainActivity.java
net.londatiga.android.example.PhotoListAdapter.java
net.londatiga.android.instagram.InstagramDialog.java
net.londatiga.android.instagram.InstagramRequest.java
net.londatiga.android.instagram.InstagramSession.java
net.londatiga.android.instagram.InstagramUser.java
net.londatiga.android.instagram.Instagram.java
net.londatiga.android.instagram.util.Cons.java
net.londatiga.android.instagram.util.Debug.java
net.londatiga.android.instagram.util.StringUtil.java