Android Open Source - UABDroid-Unit-3-Solution Form Fragment






From Project

Back to project page UABDroid-Unit-3-Solution.

License

The source code is released under:

Apache License

If you think the Android project UABDroid-Unit-3-Solution 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 2012 Ruben Serrano/*  ww w . jav a 2  s  .  c om*/

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
 */

package org.uab.deic.uabdroid.solutions.unit3;

import java.util.Calendar;

import org.uab.deic.uabdroid.solutions.unit3.entities.AppData;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.EditText;

public class FormFragment extends Fragment 
{
  private EditText mEditTextName;
  private EditText mEditTextDeveloper;
  private DatePicker mDatePickerDate;
  private EditText mEditTextURL;
  
  @Override
  public View onCreateView(LayoutInflater _inflater, ViewGroup _container, Bundle _savedInstanceState) 
  {
    View view = _inflater.inflate(R.layout.form_layout, _container, false);
    return view;
  }

  // We override onActivityCreated in order to restore the state of the fields if needed
  @Override
  public void onActivityCreated(Bundle _savedInstanceState) 
  {
    super.onActivityCreated(_savedInstanceState);
    
    // As we are in a fragment, we need the parent activity instance in order to have access 
    // to the activity's SharedPreferences and the layout Views
    final Activity parentActivity = getActivity();
    
    SharedPreferences activityPreferences = parentActivity.getPreferences(Context.MODE_PRIVATE);
    
    mEditTextName = (EditText)parentActivity.findViewById(R.id.edittext_form_name);
    mEditTextDeveloper = (EditText)parentActivity.findViewById(R.id.edittext_form_developer);
    mDatePickerDate = (DatePicker)parentActivity.findViewById(R.id.datepicker_form_date);
    mEditTextURL = (EditText)parentActivity.findViewById(R.id.edittext_form_url);
    
    // if the last run of the activity wasn't finished using the Accept or Cancel buttons
    // then we must restore the state
    if (activityPreferences.getBoolean(FormAppActivity.STATE_NOT_SAVED, false))
    {
      // Restore the name
      mEditTextName.setText(activityPreferences.getString(FormAppActivity.FORM_FIELD_NAME, ""));
      
      // Restore the developer name
      mEditTextDeveloper.setText(activityPreferences.getString(FormAppActivity.FORM_FIELD_DEVELOPER, ""));
      
      // Restore the calendar. The default values are extracted from Calendar, which is 
      // instantiated with the current date
      Calendar calendar = Calendar.getInstance();
      int day = activityPreferences.getInt(FormAppActivity.FORM_FIELD_DAY, calendar.get(Calendar.DAY_OF_MONTH));
      int month = activityPreferences.getInt(FormAppActivity.FORM_FIELD_MONTH, calendar.get(Calendar.MONTH)+1);
      int year = activityPreferences.getInt(FormAppActivity.FORM_FIELD_YEAR, calendar.get(Calendar.YEAR));
      
      mDatePickerDate.updateDate(year, month, day);
      
      // Restore the URL
      mEditTextURL.setText(activityPreferences.getString(FormAppActivity.FORM_FIELD_URL, ""));
      
      // Finally, we restore the state of STATE_NOT_SAVED to false
      SharedPreferences.Editor editor = activityPreferences.edit();
      editor.putBoolean(FormAppActivity.STATE_NOT_SAVED, false);
      editor.commit();
    }
    
    Button cleanButton = (Button) parentActivity.findViewById(R.id.button_form_clean);
    cleanButton.setOnClickListener(new OnClickListener()
    {
      // When the button is clicked, we erase the content of the controls
      // o reset them to the default value
      @Override
      public void onClick(View v) 
      {
        mEditTextName.setText("");
        mEditTextDeveloper.setText("");
        Calendar calendar = Calendar.getInstance();
        mDatePickerDate.updateDate(calendar.get(Calendar.YEAR),
                     calendar.get(Calendar.MONTH)+1,
                     calendar.get(Calendar.DAY_OF_MONTH)
                    );
        mEditTextURL.setText("");
      }
    });
    
    Button acceptButton = (Button) parentActivity.findViewById(R.id.button_form_accept);
    acceptButton.setOnClickListener(new OnClickListener()
    {
      @Override
      public void onClick(View v) 
      {
        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.DAY_OF_MONTH, mDatePickerDate.getDayOfMonth());
        calendar.set(Calendar.MONTH, mDatePickerDate.getMonth()-1);
        calendar.set(Calendar.YEAR, mDatePickerDate.getYear());
        
        String name = mEditTextName.getText().toString();
        String developer = mEditTextDeveloper.getText().toString();
        String url = mEditTextURL.getText().toString();
        
        Intent intent = new Intent(parentActivity, ResultsActivity.class);
        
        // Store the data in the intent bundle
        intent.putExtra("name", name);
        intent.putExtra("developer", name);
        intent.putExtra("date", mDatePickerDate.getDayOfMonth() + "/" + mDatePickerDate.getMonth() + "/" + mDatePickerDate.getYear());
        intent.putExtra("url", name);
        
      
        // Store the data for the App Singleton
        MyApplication.getInstance().setData(AppData.getInstance(name, developer, calendar, url));
        
        // Store the data in the database
        DatabaseAdapter databaseAdapter = new DatabaseAdapter(parentActivity);
        databaseAdapter.open();
        databaseAdapter.insertApp(name, developer, calendar, url);
        databaseAdapter.close();
        
        // Indicating that the activity is finished by the use of the button
        ((FormAppActivity)parentActivity).setButtonPressed();
        
        startActivity(intent);
        // As we have finished with this activity, we finalized it so 
        // the user never returns to it when the back button is pressed
        parentActivity.finish();
      }
    });
    
    Button cancelButton = (Button) parentActivity.findViewById(R.id.button_form_cancel);
    cancelButton.setOnClickListener(new OnClickListener()
    {
      @Override
      public void onClick(View v) 
      {
        // Finishing the activity by the use of the button
        ((FormAppActivity)parentActivity).setButtonPressed();
        parentActivity.finish();
      }
    });
  }
}




Java Source Code List

org.uab.deic.uabdroid.solutions.unit3.AppListActivity.java
org.uab.deic.uabdroid.solutions.unit3.DatabaseAdapter.java
org.uab.deic.uabdroid.solutions.unit3.FormAppActivity.java
org.uab.deic.uabdroid.solutions.unit3.FormFragment.java
org.uab.deic.uabdroid.solutions.unit3.MainActivity.java
org.uab.deic.uabdroid.solutions.unit3.MyApplication.java
org.uab.deic.uabdroid.solutions.unit3.ResultsActivity.java
org.uab.deic.uabdroid.solutions.unit3.entities.AppData.java