mirror of
				https://github.com/pierre42100/ComunicAndroid
				synced 2025-11-04 11:34:06 +00:00 
			
		
		
		
	Image are fetched online
This commit is contained in:
		@@ -7,12 +7,14 @@ import android.support.v7.app.AppCompatActivity;
 | 
			
		||||
import android.os.Bundle;
 | 
			
		||||
import android.view.Menu;
 | 
			
		||||
import android.view.MenuItem;
 | 
			
		||||
import android.widget.ImageView;
 | 
			
		||||
import android.widget.Toast;
 | 
			
		||||
 | 
			
		||||
import org.communiquons.android.comunic.client.api.APIRequestTask;
 | 
			
		||||
import org.communiquons.android.comunic.client.data.Account.Account;
 | 
			
		||||
import org.communiquons.android.comunic.client.data.Account.AccountUtils;
 | 
			
		||||
import org.communiquons.android.comunic.client.data.DatabaseHelper;
 | 
			
		||||
import org.communiquons.android.comunic.client.data.ImageLoadTask;
 | 
			
		||||
import org.communiquons.android.comunic.client.data.UsersInfo.GetUsersInfos;
 | 
			
		||||
import org.communiquons.android.comunic.client.data.UsersInfo.UserInfo;
 | 
			
		||||
 | 
			
		||||
@@ -50,6 +52,7 @@ public class MainActivity extends AppCompatActivity {
 | 
			
		||||
 | 
			
		||||
        //DEVELOPMENT : Try to get information about a user over the network
 | 
			
		||||
        GetUsersInfos uInfos = new GetUsersInfos(this, new DatabaseHelper(this));
 | 
			
		||||
        final ImageView imageView = (ImageView) findViewById(R.id.test_img);
 | 
			
		||||
        
 | 
			
		||||
        //Get infos... about me! :)
 | 
			
		||||
        final int uID = aUtils.get_current_user_id();
 | 
			
		||||
@@ -60,6 +63,10 @@ public class MainActivity extends AppCompatActivity {
 | 
			
		||||
                    Toast.makeText(MainActivity.this, "Failure !", Toast.LENGTH_SHORT).show();
 | 
			
		||||
                else {
 | 
			
		||||
                    Toast.makeText(MainActivity.this, uID + " is " + info.getFullName() + "!", Toast.LENGTH_SHORT).show();
 | 
			
		||||
 | 
			
		||||
                    new ImageLoadTask(MainActivity.this, info.getAcountImageURL(), imageView).execute();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }); 
 | 
			
		||||
 
 | 
			
		||||
@@ -0,0 +1,130 @@
 | 
			
		||||
package org.communiquons.android.comunic.client.data;
 | 
			
		||||
 | 
			
		||||
import android.content.Context;
 | 
			
		||||
import android.os.AsyncTask;
 | 
			
		||||
import android.support.v4.content.ContextCompat;
 | 
			
		||||
import android.util.Log;
 | 
			
		||||
import android.widget.ImageView;
 | 
			
		||||
 | 
			
		||||
import java.io.File;
 | 
			
		||||
import java.io.FileOutputStream;
 | 
			
		||||
import java.io.InputStream;
 | 
			
		||||
import java.io.OutputStream;
 | 
			
		||||
import java.net.HttpURLConnection;
 | 
			
		||||
import java.net.MalformedURLException;
 | 
			
		||||
import java.net.URL;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Web image loader and renderer
 | 
			
		||||
 *
 | 
			
		||||
 * @author Pierre HUBERT
 | 
			
		||||
 * Created by pierre on 11/8/17.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
public class ImageLoadTask extends AsyncTask<Void, Void, Void> {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * The URL pointing on the image
 | 
			
		||||
     */
 | 
			
		||||
    private String url;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * The target image view
 | 
			
		||||
     */
 | 
			
		||||
    private ImageView view;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * The context of execution of the request
 | 
			
		||||
     */
 | 
			
		||||
    private Context mContext;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * The main folder in the cache directory that stores the file
 | 
			
		||||
     */
 | 
			
		||||
    private final String IMAGE_CACHE_DIRECTORY = "img_cache/";
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Image file object
 | 
			
		||||
     */
 | 
			
		||||
    private File img_file = null;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Class constructor
 | 
			
		||||
     *
 | 
			
		||||
     * @param context The context of the request, in order to be able to access the cache directory
 | 
			
		||||
     * @param url The URL of the image to display
 | 
			
		||||
     * @param view The target image view for the image
 | 
			
		||||
     */
 | 
			
		||||
    public ImageLoadTask(Context context, String url, ImageView view){
 | 
			
		||||
        //Save the values
 | 
			
		||||
        this.mContext = context;
 | 
			
		||||
        this.url = url;
 | 
			
		||||
        this.view = view;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Background task
 | 
			
		||||
     */
 | 
			
		||||
    @Override
 | 
			
		||||
    protected Void doInBackground(Void... param){
 | 
			
		||||
 | 
			
		||||
        //Determine the file name for the view
 | 
			
		||||
        String filename = get_file_name(url);
 | 
			
		||||
        if(filename == null){
 | 
			
		||||
            Log.e("ImageLoadTask", "Couldn't generate file storage name !");
 | 
			
		||||
            return null; //An error occured
 | 
			
		||||
        }
 | 
			
		||||
        String full_filename = IMAGE_CACHE_DIRECTORY + filename;
 | 
			
		||||
 | 
			
		||||
        //Try to open the file
 | 
			
		||||
        img_file = new File(mContext.getCacheDir(), full_filename);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        //Check for errors
 | 
			
		||||
        if(img_file == null){
 | 
			
		||||
            Log.e("ImageLoadTask", "Couldn't open image file !");
 | 
			
		||||
            return null;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        try {
 | 
			
		||||
            //Open the connection
 | 
			
		||||
            URL urlObj = new URL(url);
 | 
			
		||||
            HttpURLConnection conn = (HttpURLConnection) urlObj.openConnection();
 | 
			
		||||
 | 
			
		||||
            conn.setDoInput(true);
 | 
			
		||||
            conn.setConnectTimeout(3000);
 | 
			
		||||
            conn.setReadTimeout(3000);
 | 
			
		||||
 | 
			
		||||
            conn.connect();
 | 
			
		||||
 | 
			
		||||
            //Get input stream
 | 
			
		||||
            InputStream is = conn.getInputStream();
 | 
			
		||||
 | 
			
		||||
            //Open the file for writing
 | 
			
		||||
            OutputStream os = new FileOutputStream(img_file, false);
 | 
			
		||||
 | 
			
		||||
            //Transfert bytes
 | 
			
		||||
            Utilities.InputToOutputStream(is, os);
 | 
			
		||||
 | 
			
		||||
            os.close();
 | 
			
		||||
            is.close();
 | 
			
		||||
 | 
			
		||||
        } catch (Exception e) {
 | 
			
		||||
            e.printStackTrace();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return null;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get the file name, based on the URL name
 | 
			
		||||
     *
 | 
			
		||||
     * @param url The URL of the file
 | 
			
		||||
     * @return The name of the file, composed of characters that can be used in filename
 | 
			
		||||
     */
 | 
			
		||||
    private String get_file_name(String url){
 | 
			
		||||
        return Utilities.sha1(url);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@@ -7,6 +7,13 @@ import android.util.Patterns;
 | 
			
		||||
 | 
			
		||||
import java.io.FileInputStream;
 | 
			
		||||
import java.io.FileOutputStream;
 | 
			
		||||
import java.io.IOException;
 | 
			
		||||
import java.io.InputStream;
 | 
			
		||||
import java.io.OutputStream;
 | 
			
		||||
import java.io.UnsupportedEncodingException;
 | 
			
		||||
import java.security.NoSuchAlgorithmException;
 | 
			
		||||
import java.util.Formatter;
 | 
			
		||||
import java.security.MessageDigest;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Application utilities
 | 
			
		||||
@@ -104,4 +111,77 @@ public class Utilities {
 | 
			
		||||
    public boolean isValidMail(CharSequence mail){
 | 
			
		||||
        return !TextUtils.isEmpty(mail) && Patterns.EMAIL_ADDRESS.matcher(mail).matches();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Generate the SHA-1 summary of a given string
 | 
			
		||||
     *
 | 
			
		||||
     * @param source The source string
 | 
			
		||||
     * @return The SHA-1 encoded string
 | 
			
		||||
     */
 | 
			
		||||
    public static String sha1(String source){
 | 
			
		||||
 | 
			
		||||
        String sha1;
 | 
			
		||||
 | 
			
		||||
        try {
 | 
			
		||||
            MessageDigest crypt = MessageDigest.getInstance("SHA-1");
 | 
			
		||||
            crypt.reset();
 | 
			
		||||
            crypt.update(source.getBytes("UTF-8"));
 | 
			
		||||
            sha1 = byteToHex(crypt.digest());
 | 
			
		||||
        } catch (NoSuchAlgorithmException e) {
 | 
			
		||||
            e.printStackTrace();
 | 
			
		||||
            return null;
 | 
			
		||||
        } catch (UnsupportedEncodingException e){
 | 
			
		||||
            e.printStackTrace();
 | 
			
		||||
            return null;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return sha1;
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Convert an array of bytes into a string
 | 
			
		||||
     *
 | 
			
		||||
     * @param bList The list of bytes
 | 
			
		||||
     * @return The result string
 | 
			
		||||
     */
 | 
			
		||||
    private static String byteToHex(byte[] bList){
 | 
			
		||||
 | 
			
		||||
        Formatter formatter = new Formatter();
 | 
			
		||||
 | 
			
		||||
        for(byte b : bList){
 | 
			
		||||
            formatter.format("%02x", b);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        String result = formatter.toString();
 | 
			
		||||
        formatter.close();
 | 
			
		||||
        return result;
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Transfer all the data coming from an InputStream to an Output Stream
 | 
			
		||||
     *
 | 
			
		||||
     * @param is The Input stream
 | 
			
		||||
     * @param os The output stream
 | 
			
		||||
     * @return The number of byte transfered
 | 
			
		||||
     */
 | 
			
		||||
    public static int InputToOutputStream(InputStream is, OutputStream os){
 | 
			
		||||
 | 
			
		||||
        int count = 0;
 | 
			
		||||
 | 
			
		||||
        try {
 | 
			
		||||
            int b = is.read();
 | 
			
		||||
            while (b != -1){
 | 
			
		||||
                os.write(b);
 | 
			
		||||
                count++;
 | 
			
		||||
                b = is.read();
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
        } catch (IOException e){
 | 
			
		||||
            e.printStackTrace();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return count;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -15,4 +15,14 @@
 | 
			
		||||
        app:layout_constraintRight_toRightOf="parent"
 | 
			
		||||
        app:layout_constraintTop_toTopOf="parent" />
 | 
			
		||||
 | 
			
		||||
    <ImageView
 | 
			
		||||
        android:id="@+id/test_img"
 | 
			
		||||
        android:layout_width="wrap_content"
 | 
			
		||||
        android:layout_height="wrap_content"
 | 
			
		||||
        tools:layout_width="100dp"
 | 
			
		||||
        tools:layout_height="100dp"
 | 
			
		||||
        app:layout_constraintTop_toTopOf="parent"
 | 
			
		||||
        app:layout_constraintLeft_toLeftOf="parent"
 | 
			
		||||
        />
 | 
			
		||||
 | 
			
		||||
</android.support.constraint.ConstraintLayout>
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user