nheyek/SDP-2018

View on GitHub
app/src/main/java/ch/epfl/sweng/studyup/player/CustomActivity.java

Summary

Maintainability
A
1 hr
Test Coverage
package ch.epfl.sweng.studyup.player;

import android.Manifest;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.provider.MediaStore;
import android.support.annotation.NonNull;
import android.support.annotation.RequiresApi;
import android.support.v4.graphics.drawable.RoundedBitmapDrawable;
import android.support.v4.graphics.drawable.RoundedBitmapDrawableFactory;
import android.util.Log;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.Normalizer;

import ch.epfl.sweng.studyup.R;
import ch.epfl.sweng.studyup.firebase.FileStorage;
import ch.epfl.sweng.studyup.utils.RefreshContext;
import ch.epfl.sweng.studyup.utils.Utils;

import static ch.epfl.sweng.studyup.utils.Constants.COLOR_SETTINGS_KEYWORD;
import static ch.epfl.sweng.studyup.utils.Constants.SETTINGS_COLOR_DARK;
import static ch.epfl.sweng.studyup.utils.Constants.SETTINGS_COLOR_RED;
import static ch.epfl.sweng.studyup.utils.Constants.USER_PREFS;
import static ch.epfl.sweng.studyup.utils.GlobalAccessVariables.MOCK_ENABLED;


/**
 * CustomActivity
 *
 * Code used in the activity_custom to personnalize a Player.
 */
public class CustomActivity extends RefreshContext {
    @SuppressWarnings("HardCodedStringLiteral")
    private static final String TAG = "CustomActivity";
    private static final int CAMERA_PERMISSION_REQUEST_CODE = 8826229;
    private static final int GALLERY = 0, CAMERA = 1;
    private ImageView imageview;
    private EditText edit_username;
    public ImageButton valid_button;

    @SuppressWarnings("HardCodedStringLiteral")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_custom);

        valid_button = findViewById(R.id.valid_btn);
        imageview = findViewById(R.id.pic_imageview);
        edit_username = findViewById(R.id.edit_username);
        edit_username.setText(Player.get().getUserName());

        setMailInTextView();
        //initial picture
        FileStorage.downloadProfilePicture(Player.get().getSciperNum(), imageview);
    }

    private void setMailInTextView() {
        final TextView user_email = findViewById(R.id.user_email);
        String email_1 = Player.get().getFirstName().split(" ")[0].toLowerCase();
        email_1 = Normalizer.normalize(email_1, Normalizer.Form.NFD).replaceAll("[^\\p{ASCII}]", "");
        String email_2 = Player.get().getLastName().split(" ")[0].toLowerCase();
        email_2 = Normalizer.normalize(email_2, Normalizer.Form.NFD).replaceAll("[^\\p{ASCII}]", "");
        user_email.setText(email_1+ "."+ email_2 +"@epfl.ch");
        String col = getSharedPreferences(USER_PREFS, MODE_PRIVATE)
                .getString(COLOR_SETTINGS_KEYWORD, SETTINGS_COLOR_RED);
        int textColor = col.equals(SETTINGS_COLOR_DARK) ?
                getResources().getColor(R.color.colorGreyClair) :
                getResources().getColor(R.color.colorDarkkkk);
        user_email.setTextColor(textColor);
    }

    public void selectImage(View v) {
        String col = getSharedPreferences(USER_PREFS, MODE_PRIVATE)
                .getString(COLOR_SETTINGS_KEYWORD, SETTINGS_COLOR_RED);
        AlertDialog.Builder dialogBuilder = col.equals(SETTINGS_COLOR_DARK) ?
                new AlertDialog.Builder(this, AlertDialog.THEME_DEVICE_DEFAULT_DARK) : new AlertDialog.Builder(this);

        dialogBuilder.setTitle(getString(R.string.text_addimage));
        final String[] items = {getString(R.string.gallery), getString(R.string.camera), getString(R.string.cancel)};

        dialogBuilder.setItems(items, new DialogInterface.OnClickListener() {
            @RequiresApi(api = Build.VERSION_CODES.M)
            @Override
            public void onClick(DialogInterface dialog, int which) {
                if (which == GALLERY) {
                    openGallery();
                } else if (which == CAMERA) {
                    if (checkSelfPermission(Manifest.permission.CAMERA)
                            == PackageManager.PERMISSION_GRANTED) {
                        openCamera();
                    } else {
                        // We are here if we dont already have permission to invoke the camera,
                        // although we have the permission in the manifest
                        // We now have to override the method invoked for permissions:
                        // onRequestPermissionsResult()
                        String[] permissionRequest = {Manifest.permission.CAMERA};
                        requestPermissions(permissionRequest, CAMERA_PERMISSION_REQUEST_CODE);
                    }
                } else {
                    dialog.dismiss();
                }
            }
        });
        dialogBuilder.show();
    }

    private void openCamera() {
        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        if (!MOCK_ENABLED) {
            startActivityForResult(intent, CAMERA);
        }
    }

    private void openGallery() {
        Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
        if (!MOCK_ENABLED) {
            startActivityForResult(intent, GALLERY);
        }
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
                                           @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if (requestCode == CAMERA_PERMISSION_REQUEST_CODE) {
            if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                openCamera();
            } else {
                Toast.makeText(this, getString(R.string.text_photospermissions),
                        Toast.LENGTH_LONG).show();
            }
        }
    }


    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {

        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode == RESULT_CANCELED) {
            return;
        }
        if (requestCode == GALLERY) {
            if (data != null) {
                Uri contentURI = data.getData();
                try {
                    Bitmap bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), contentURI);
                    setImageCircularAndUpload(bitmap);
                } catch (IOException e) {
                    e.printStackTrace();
                    Toast.makeText(CustomActivity.this, getString(R.string.text_failed), Toast.LENGTH_SHORT).show();
                }
            }
        } else if (requestCode == CAMERA) {
            @SuppressWarnings("HardCodedStringLiteral")
            Bitmap bitmap = (Bitmap) data.getExtras().get("data");
            setImageCircularAndUpload(bitmap);
        }
    }

    public void setImageCircularAndUpload(Bitmap bitmap) {
        @SuppressWarnings("HardCodedStringLiteral")
        String newPictureFileID = Player.get().getSciperNum() + ".png";
        File pictureFile = new File(this.getApplicationContext().getFilesDir(), newPictureFileID);
        try {
            FileOutputStream out = new FileOutputStream(pictureFile);
            bitmap.compress(Bitmap.CompressFormat.PNG, 100, out);
            out.close();
        } catch (IOException e) {
            Log.e(TAG, e.getMessage());
        }

        FileStorage.uploadProfilePicture(pictureFile);

        RoundedBitmapDrawable rbd = RoundedBitmapDrawableFactory.create(getResources(), bitmap);
        rbd.setCircular(true);

        Toast.makeText(CustomActivity.this, getString(R.string.text_saved), Toast.LENGTH_SHORT).show();
        imageview.setImageDrawable(rbd);
    }

    public void setEditUsername(View v) {
        Toast.makeText(getApplicationContext(), getString(R.string.text_saved), Toast.LENGTH_SHORT).show();
        Player.get().setUserName(edit_username.getText().toString());
    }

    public void makeValidBtnVisible(View v) {
        valid_button.setBackground(getResources().getDrawable(R.drawable.ic_check_done_24dp));
    }

    public void onBackButton(View v){
        Utils.restartHomeActivity(CustomActivity.this);
    }

    @Override
    public void onBackPressed() {
        super.onBackPressed();
        Utils.restartHomeActivity(CustomActivity.this);
    }
}