Android Open Source - ImproveMyCity-Mobile Fragment_ New Issue A






From Project

Back to project page ImproveMyCity-Mobile.

License

The source code is released under:

GNU General Public License

If you think the Android project ImproveMyCity-Mobile 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

/**
 * @copyright   Copyright (C) 2012 - 2013 Information Technology Institute ITI-CERTH. All rights reserved.
 * @license     GNU Affero General Public License version 3 or later; see LICENSE.txt
 * @author      Dimitrios Ververidis for the Multimedia Group (http://mklab.iti.gr). 
 *//* w  ww  .  ja  v a 2s .c  o m*/
package com.mk4droid.IMC_Activities;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Locale;

import android.app.AlertDialog;
import android.app.Service;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Matrix;
import android.media.ExifInterface;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.preference.PreferenceManager;
import android.provider.MediaStore;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentTransaction;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.inputmethod.InputMethodManager;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.ImageView.ScaleType;
import android.widget.LinearLayout;
import android.widget.Spinner;
import android.widget.Toast;

import com.flurry.android.FlurryAgent;
import com.mk4droid.IMC_Constructors.Category;
import com.mk4droid.IMC_Core.SpinnerAdapter_NewIssueCateg;
import com.mk4droid.IMC_Services.Service_Data;
import com.mk4droid.IMC_Store.Constants_API;
import com.mk4droid.IMC_Utils.My_System_Utils;
import com.mk4droid.IMCity_PackDemo.R;

/**
 * A form for writing issue title, description, category, attaching photo, and proceed to localization of the issue (Fragment_NewIssueB)
 * 
 * @copyright   Copyright (C) 2012 - 2013 Information Technology Institute ITI-CERTH. All rights reserved.
 * @license     GNU Affero General Public License version 3 or later; see LICENSE.txt
 * @author      Dimitrios Ververidis for the Multimedia Group (http://mklab.iti.gr). 
 * 
 */
public class Fragment_NewIssueA extends Fragment {

  /** path of temporary image File of issue */
  public static String image_path_source_temp =               
      Environment.getExternalStorageDirectory().getAbsolutePath() + "/"+ Environment.DIRECTORY_DCIM + "/tmp_image.jpg";
  
  /** Attach image button */
  public static ImageButton btAttachImage;
  
  /** LinearLayout of fragment new issue (the first part) */
  public static LinearLayout llnewissue_a;
    
  /** Flag to indicate that new issue guis are reset  */
  public static boolean flagStarter = true;
  
  //========= Private vars =============
  // System vars 
  SharedPreferences mshPrefs;
  static Resources resources;
  DisplayMetrics metrics;
  static Context ctx;
  int tlv = Toast.LENGTH_LONG;
  
  // fragment vars 
  static Fragment_NewIssueA mfrag_nIssueA;
  View vfrag_nIssueA;
  
  static Fragment_NewIssueB mfrag_nIssueB;
  
  //  Task vars 
  Button btProceed;
  static EditText et_title,et_descr;

  static LinearLayout llUnauth;  // unauthorized message 
  
  private Bitmap Image_BMP;  // New issue Bitmap
  
  static int CAMERA_PIC_REQUEST = 1337;
  static int SELECT_PICTURE     = 1;
  private static File fimg;
  static boolean flagPictureTaken = false;

  boolean AuthFlag;

  //---------- Task Variables --------------
  static String titleData_STR = "";
  static String descriptionData_STR = "";
  
  static int[] SpinnerArrID;  // This contains category ids as in MySQL
  public static int spPosition = -1;
  static Spinner sp; // spinner of categories
  SpinnerAdapter_NewIssueCateg adapterSP; // spinner adapter
  
  String[] SpinnerArrString;     

   /* 
    *  onCreate fragment
   */
  @Override
  public void onCreate(Bundle savedInstanceState) {
    
    mshPrefs = PreferenceManager.getDefaultSharedPreferences(getActivity());
    resources = SetResources();
    
    super.onCreate(savedInstanceState);
  }

  
  /**
   *          OnCreateView 
   */
  @Override
  public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    
    flagStarter = true;
    
    FActivity_TabHost.IndexGroup = 2;
    vfrag_nIssueA = inflater.inflate(R.layout.fragment_newissue_a, container, false);
    
    mfrag_nIssueA  = this;
    
    ctx = this.getActivity();
    
    //-------- tvUnauth ---- 
    llUnauth = (LinearLayout)vfrag_nIssueA.findViewById(R.id.llUnauth);
    
    Button gotoSetup = (Button) llUnauth.findViewById(R.id.bt_nia_gosetup);
    gotoSetup.setOnClickListener(new OnClickListener() {
      
      @Override
      public void onClick(View v) {
        getActivity().finish();
        
        // Check if Activity Splash Already open
        if (Activity_Splash_Login.et_username == null){
          Log.e("NIA", "SPLASH WAS NULL");
          startActivity(new Intent(ctx, Activity_Splash_Login.class));
        }
        
        getActivity().finish();
      }
    });
    
    
    //---- Spinner -----
    ArrayList<Category> mCatL_Sorted = SortCategList(Service_Data.mCategL);
    SpinnerArrString = initSpinner(mCatL_Sorted);

    sp = (Spinner)vfrag_nIssueA.findViewById(R.id.spinnerCateg);
    
    adapterSP = new SpinnerAdapter_NewIssueCateg(getActivity(),    //--- Set spinner adapter --
                        android.R.layout.simple_spinner_item, mCatL_Sorted);
    sp.setAdapter(adapterSP);
    
    
    
    sp.setOnItemSelectedListener(new OnItemSelectedListener() {

      @Override
      public void onItemSelected(AdapterView<?> parent, View arg1,
          int arg2, long arg3) {
         
        if (flagStarter){
          flagStarter = false;
        } else {
          spPosition = arg2;
        }
      }

      @Override
      public void onNothingSelected(AdapterView<?> arg0) {
      }
    });
    
    //--------- Title -----

    et_title = (EditText)vfrag_nIssueA.findViewById(R.id.etTitle_ni);
    
    if (et_title!=null)
      if (et_title.getText().toString().length()>0)
        titleData_STR = et_title.getText().toString();


    if(titleData_STR.length()>0)
    et_title.setText(titleData_STR);

    //------ Description ----

    et_descr = (EditText)vfrag_nIssueA.findViewById(R.id.etDescription);
    if (et_descr!=null)
    if (et_descr.getText().toString().length()>0)
      descriptionData_STR = et_descr.getText().toString();

    
    //------- Bt Attach image ---
    btAttachImage = (ImageButton)vfrag_nIssueA.findViewById(R.id.btAttach_image);

    //-------- Bt Proceed -----
    btProceed = (Button)vfrag_nIssueA.findViewById(R.id.btProceed_ni_B);
  
    mshPrefs = PreferenceManager.getDefaultSharedPreferences(getActivity());
    resources = SetResources();
        
    //--------- Layout -------
    llnewissue_a = (LinearLayout)vfrag_nIssueA.findViewById(R.id.llnewissue_a);
    llnewissue_a.setVisibility(View.VISIBLE);
    
    //-------- Take Image button -------
    if (flagPictureTaken && Image_BMP !=null){

      btAttachImage.setScaleType(ScaleType.CENTER_CROP);

      try {
        btAttachImage.setImageBitmap(Image_BMP);
      } catch (Exception e){

        // if the btAttachImage was null set Image with some delay
        btAttachImage.postDelayed(new Runnable() {
          @Override
          public void run() {
            btAttachImage.setImageBitmap(Image_BMP);
          }
        }, 1000);
      };
    } else {
      btAttachImage.setScaleType(ScaleType.CENTER_INSIDE);
      btAttachImage.setImageResource(R.drawable.bt_custom_camera_round); //R.drawable.pattern_camera_repeater));
    }
    

    btAttachImage.setOnClickListener(new OnClickListener() {

      @Override
      public void onClick(View v) {
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());

        builder.setTitle(FActivity_TabHost.resources.getString(R.string.Attachanimage));
        builder.setIcon( android.R.drawable.ic_menu_gallery);

        // 1 select
        builder.setPositiveButton(FActivity_TabHost.resources.getString(R.string.Gallery),
            new DialogInterface.OnClickListener() {
          public void onClick(DialogInterface dialog, int id) {

            dialog.dismiss();

            Intent intent = new Intent();
            intent.setType("image/jpeg");
            intent.setAction(Intent.ACTION_GET_CONTENT);
            startActivityForResult(Intent.createChooser(intent, "Select Picture"), SELECT_PICTURE);
          }
        });

        // 2 Shoot
        builder.setNeutralButton(FActivity_TabHost.resources.getString(R.string.Camera),
            new DialogInterface.OnClickListener() {
          public void onClick(DialogInterface dialog, int id) {

            dialog.dismiss();
            // 2 shoot 
            fimg = new File (image_path_source_temp);
            Uri uri = Uri.fromFile(fimg);

            Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
            cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, uri);

            startActivityForResult(cameraIntent, CAMERA_PIC_REQUEST);  
          }
        });


        // 3 clear 
        builder.setNegativeButton(FActivity_TabHost.resources.getString(R.string.Clear),
            new DialogInterface.OnClickListener() {
          public void onClick(DialogInterface dialog, int id) {
            //dialog.cancel();

            flagPictureTaken = false;
            File imagef = new File(image_path_source_temp);
            imagef.delete();

            dialog.dismiss();

            //btAttachImage.setCompoundDrawablesWithIntrinsicBounds( 0, R.drawable.bt_custom_camera_round, 0,  0);
            btAttachImage.setScaleType(ScaleType.CENTER_INSIDE);
            btAttachImage.setImageResource(R.drawable.bt_custom_camera_round);
            
          //  btAttachImage.setPadding(0, 40, 0, 0);
          }
        });

        builder.create();
        builder.show();
      }});

    //------------- button Proceed ----------
    btProceed.setOnClickListener(new OnClickListener() {

      @Override
      public void onClick(View vBt) {
        
        // Check if title is long enough and sent
        if ( et_title.getText().toString().length() > 2 && spPosition != -1 && et_descr.getText().toString().length() > 2){                // RRR
                     
          titleData_STR = et_title.getText().toString();

          if ( et_descr.getText().toString().length() > 0)
            descriptionData_STR =  et_descr.getText().toString();

          // Close Keyboard
          InputMethodManager imm = (InputMethodManager)getActivity().getSystemService(Service.INPUT_METHOD_SERVICE);
          imm.hideSoftInputFromWindow(et_title.getWindowToken(), 0); 
          imm.hideSoftInputFromWindow(et_descr.getWindowToken(), 0);

          // Instantiate a new fragment.
          mfrag_nIssueB = new Fragment_NewIssueB();

          Bundle args = new Bundle();
          args.putInt("IndexSpinner", sp.getSelectedItemPosition());
          mfrag_nIssueB.setArguments(args);
          
          // Add the fragment to the activity, pushing this transaction
          // on to the back stack.
          FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction();
          ft.add(mfrag_nIssueA.getId(), mfrag_nIssueB, "FTAG_NEW_ISSUE_B");
          ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
          ft.addToBackStack(null);
          ft.commit();
        }else if (spPosition == -1){
          Toast.makeText(getActivity(), resources.getString(R.string.SelectaCategory), tlv).show();
        }else if (et_title.getText().toString().length() <= 2 ){
          Toast.makeText(getActivity(), resources.getString(R.string.LongerTitle) , tlv).show();
        }else if (et_descr.getText().toString().length() <= 2){
          Toast.makeText(getActivity(), resources.getString(R.string.LongerDescription), tlv).show();
        } 
      }
    });


    return vfrag_nIssueA;
  }// Endof Create

  //=============== onActivityResult ===============================
  /**
   *    When returning from shooting an image from camera or selecting an image from Gallery. 
   */
  public void onActivityResult(int requestCode, int resultCode, Intent intentdata) {  

    if ((requestCode == CAMERA_PIC_REQUEST || requestCode == SELECT_PICTURE) && resultCode == -1 ){   //  - 1 = RESULT_OK 

      flagPictureTaken = true;
      if ( requestCode == SELECT_PICTURE){
        Uri selectedImageUri = intentdata.getData();
        My_System_Utils.FCopy(image_path_source_temp, getPath(selectedImageUri));
      }

      CheckOrient();
      //btAttachImage.setCompoundDrawablesWithIntrinsicBounds(null, null, null,  null);
      
      btAttachImage.setImageBitmap(Image_BMP);
      btAttachImage.setScaleType(ScaleType.CENTER_CROP);
      
    }  else {
      flagPictureTaken = false;
      File imagef = new File(image_path_source_temp);
      imagef.delete();
    } 
  }  

  

  //============ getPath ==================================  
  /**
   *  Get path where image was stored after shooting with camera
   * 
   * @param uri general uri for android metadata
   * @return path of the image
   */
  public String getPath(Uri uri) {
    String[] projection = { MediaStore.Images.Media.DATA };
    Cursor cursor = getActivity().getContentResolver().query(uri, projection, null, null, null);
    int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
    cursor.moveToFirst();
    return cursor.getString(column_index);
  }
  
  //============ On Resume ============
  /** Resume from changing tabs */
  @Override
  public void onResume() {
    super.onResume();
    resources = SetResources();
    
    if (spPosition!=-1){
      sp.post(new Runnable() {        
          public void run() {
            sp.setSelection(spPosition,true);
          }
        });
    }
    
    llnewissue_a.setVisibility(View.VISIBLE);
            
    //--------- Show Unauthorized message ------------
    for (int i=0; i< llnewissue_a.getChildCount(); i++)
      if (!AuthFlag)
        llnewissue_a.getChildAt(i).setVisibility(View.GONE);
      else 
        llnewissue_a.getChildAt(i).setVisibility(View.VISIBLE);

    if (!AuthFlag){
      llUnauth.setVisibility(View.VISIBLE);
    }else{
      llUnauth.setVisibility(View.GONE);
    }

    et_title.setHint(resources.getString(R.string.STitle));
    et_descr.setHint(resources.getString(R.string.Description));
  
    //----------- Flurry Analytics --------
    boolean AnalyticsSW                = mshPrefs.getBoolean("AnalyticsSW", true);
    if (AnalyticsSW)
      FlurryAgent.onStartSession(getActivity(), Constants_API.Flurry_Key);
  }  


  //============ onPause ============== 
  /** Pause when changing tab. Stop Flurry. */
  @Override
  public void onPause() {
    super.onPause();

    InputMethodManager imm = (InputMethodManager)ctx.getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.hideSoftInputFromWindow(et_title.getWindowToken(), 0);
    imm.hideSoftInputFromWindow(et_descr.getWindowToken(), 0);
    
    //-- Flurry Analytics --
    boolean AnalyticsSW = mshPrefs.getBoolean("AnalyticsSW", true);

    if (AnalyticsSW)
      FlurryAgent.onEndSession(getActivity());
  }  
  
  //============= Sort Category List ====================
  /** Sort categories in the list according to parent and child information */
  public ArrayList<Category> SortCategList(ArrayList<Category> InL){
    ArrayList<Category> OutL = new ArrayList<Category>(); 
    int i=0;
    while (i< InL.size()){
      if (InL.get(i)._level == 1){ // Parent
        OutL.add(InL.get(i));
        int parent_id = InL.get(i)._id; 
        int j = 0;
        while (j<InL.size()){
          if (InL.get(j)._parentid == parent_id){
            OutL.add(InL.get(j));
          }
          j=j+1;
        }
      }    
      i=i+1;
    }
    return OutL;
  }

  //===============  initSpinner ================ 
  /** Initialize Spinner strings */
  public String[] initSpinner(ArrayList<Category> L){
    int NCategs = L.size();

    // --- Assign Strings and IDs for spinner use ----
    String[] Res     = new String[NCategs]; 
    SpinnerArrID     = new int[NCategs];  

    for (int i=0; i < NCategs; i++){
      Res[i]              = L.get(i)._name;   
      SpinnerArrID[i]     = L.get(i)._id;     
    }

    return Res;
  }

  //===========  Set Resources ==================
  /**
   * Obtain resources from preferences 
   * @return
   */
  public Resources SetResources(){
    String LangSTR   = mshPrefs.getString("LanguageAR", Constants_API.DefaultLanguage);
    AuthFlag         = mshPrefs.getBoolean("AuthFlag", false);

    Configuration conf = getResources().getConfiguration();
    conf.locale = new Locale(LangSTR.substring(0, 2)); //----- Convert Greek -> el ---------
    metrics = new DisplayMetrics();
    getActivity().getWindowManager().getDefaultDisplay().getMetrics(metrics);
    return new Resources(getActivity().getAssets(), metrics, conf);
  }
  
  
  //================ CheckOrient =============================    
  /**
   *        Check Image Orientation  
   */
  public void CheckOrient(){  

    BitmapFactory.Options options=new BitmapFactory.Options(); // Resize is needed otherwize outofmemory exception
    options.inSampleSize = 6;

    //------------- read tmp file ------------------ 
    Image_BMP   = BitmapFactory.decodeFile(image_path_source_temp, options); // , options

    //---------------- find exif header --------
    ExifInterface exif;
    String exifOrientation = "0"; // 0 = exif not working
    try {
      exif = new ExifInterface(image_path_source_temp);
      exifOrientation = exif.getAttribute(ExifInterface.TAG_ORIENTATION);
    } catch (IOException e1) {
      e1.printStackTrace();
    }    

    //---------------- Resize ---------------------
    if (exifOrientation.equals("0")){   
      if ( Image_BMP.getWidth() < Image_BMP.getHeight() && Image_BMP.getWidth() > 400 ){
        Image_BMP   = Bitmap.createScaledBitmap(Image_BMP, 400, 640, true); // <- To sent
      } else if ( Image_BMP.getWidth() > Image_BMP.getHeight() && Image_BMP.getWidth() > 640 ) { 
        Image_BMP = Bitmap.createScaledBitmap(Image_BMP, 640, 400, true); // <- To sent
      }        
    } else {

      if (exifOrientation.equals("1") && Image_BMP.getWidth() > 640 ){  // normal

        Image_BMP   = Bitmap.createScaledBitmap(Image_BMP, 640, 400, true); // <- To sent

      } else if (exifOrientation.equals("6") && Image_BMP.getWidth() > 400 ){  // rotated 90 degrees

        // Rotate
        Matrix matrix = new Matrix();

        int bmwidth  = Image_BMP.getWidth();
        int bmheight = Image_BMP.getHeight();

        matrix.postRotate(90);

        Image_BMP = Bitmap.createBitmap(Image_BMP, 0, 0, bmwidth,
            bmheight, matrix, true);

        Image_BMP = Bitmap.createScaledBitmap(Image_BMP, 400, 640, true); // <- To sent
      }
    }

    DisplayMetrics metrics = new DisplayMetrics();
    getActivity().getWindowManager().getDefaultDisplay().getMetrics(metrics);

    //------------ now store as jpg over the temp jpg
    File imagef = new File(image_path_source_temp);
    try {
      Image_BMP.compress(Bitmap.CompressFormat.JPEG, 95, new FileOutputStream(imagef));
    } catch (FileNotFoundException e) {
      e.printStackTrace();
    }
  }
    //===========================================
}




Java Source Code List

com.mk4droid.IMC_Activities.Activity_Information_Detailed.java
com.mk4droid.IMC_Activities.Activity_Register.java
com.mk4droid.IMC_Activities.Activity_Setup.java
com.mk4droid.IMC_Activities.Activity_Splash_Login.java
com.mk4droid.IMC_Activities.Activity_Thinking.java
com.mk4droid.IMC_Activities.FActivity_TabHost.java
com.mk4droid.IMC_Activities.Fragment_Comments.java
com.mk4droid.IMC_Activities.Fragment_Filters.java
com.mk4droid.IMC_Activities.Fragment_Issue_Details.java
com.mk4droid.IMC_Activities.Fragment_List.java
com.mk4droid.IMC_Activities.Fragment_Map.java
com.mk4droid.IMC_Activities.Fragment_NewIssueA.java
com.mk4droid.IMC_Activities.Fragment_NewIssueB.java
com.mk4droid.IMC_Activities.package-info.java
com.mk4droid.IMC_Constructors.Category.java
com.mk4droid.IMC_Constructors.Comment.java
com.mk4droid.IMC_Constructors.IssueListItem.java
com.mk4droid.IMC_Constructors.IssuePic.java
com.mk4droid.IMC_Constructors.Issue.java
com.mk4droid.IMC_Constructors.VersionDB.java
com.mk4droid.IMC_Constructors.Vote.java
com.mk4droid.IMC_Constructors.package-info.java
com.mk4droid.IMC_Core.FilterCateg_ExpandableListAdapter.java
com.mk4droid.IMC_Core.ImageView_Zoom.java
com.mk4droid.IMC_Core.InfoWindowAdapterButtoned.java
com.mk4droid.IMC_Core.Issues_ListAdapter.java
com.mk4droid.IMC_Core.Preference_About.java
com.mk4droid.IMC_Core.Preference_AccountOperations.java
com.mk4droid.IMC_Core.Preference_Email.java
com.mk4droid.IMC_Core.Preference_PlainText.java
com.mk4droid.IMC_Core.Preference_Reset.java
com.mk4droid.IMC_Core.Preference_SeekBar.java
com.mk4droid.IMC_Core.SpinnerAdapter_NewIssueCateg.java
com.mk4droid.IMC_Core.package-info.java
com.mk4droid.IMC_Services.DatabaseHandler.java
com.mk4droid.IMC_Services.Download_Data.java
com.mk4droid.IMC_Services.InternetConnCheck.java
com.mk4droid.IMC_Services.Security.java
com.mk4droid.IMC_Services.Service_Data.java
com.mk4droid.IMC_Services.Service_Location.java
com.mk4droid.IMC_Services.Upload_Data.java
com.mk4droid.IMC_Services.package-info.java
com.mk4droid.IMC_Store.Constants_API.java
com.mk4droid.IMC_Store.Phptasks.java
com.mk4droid.IMC_Store.package-info.java
com.mk4droid.IMC_Utils.GEO.java
com.mk4droid.IMC_Utils.My_Crypt_Utils.java
com.mk4droid.IMC_Utils.My_Date_Utils.java
com.mk4droid.IMC_Utils.My_System_Utils.java
com.mk4droid.IMC_Utils.RestCaller.java
com.mk4droid.IMC_Utils.RestClient.java
com.mk4droid.IMC_Utils.package-info.java