Back to project page Android-CriminalIntent.
The source code is released under:
MIT License
If you think the Android project Android-CriminalIntent listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.
package com.bignerdranch.android.criminalintent; // www . j a v a 2 s . c o m import android.annotation.TargetApi; import android.app.Activity; import android.content.Intent; import android.content.pm.PackageManager; import android.content.res.Configuration; import android.database.Cursor; import android.graphics.drawable.BitmapDrawable; import android.net.Uri; import android.os.Build; import android.os.Bundle; import android.provider.ContactsContract; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.NavUtils; import android.text.Editable; import android.text.TextWatcher; import android.text.format.DateFormat; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.EditText; import android.widget.ImageButton; import android.widget.ImageView; import java.util.Date; import java.util.UUID; /** * A simple {@link android.support.v4.app.Fragment} subclass. */ public class CrimeFragment extends Fragment { private static final String TAG = CrimeFragment.class.getSimpleName(); private static final String DIALOG_DATE = "date"; private static final String DIALOG_IMAGE = "image"; private static final int REQUEST_DATE = 0; private static final int REQUEST_PHOTO = 1; private static final int REQUEST_CONTACT = 2; public static final String EXTRA_CRIME_ID = "com.bignerdranch.android.criminalintent.crime_id"; private Crime mCrime; private EditText mTitleField; private ImageButton mPhotoButton; private ImageView mPhotoView; private Button mDateButton; private CheckBox mSolvedCheckBox; private Button mReportButton; private Button mSuspectButton; private Button mCallButton; public static CrimeFragment newInstance(UUID crimeId) { Bundle args = new Bundle(); args.putSerializable(EXTRA_CRIME_ID, crimeId); CrimeFragment fragment = new CrimeFragment(); fragment.setArguments(args); return fragment; } public CrimeFragment() { // Required empty public constructor } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setHasOptionsMenu(true); UUID crimeId = (UUID) getArguments().getSerializable(EXTRA_CRIME_ID); mCrime = CrimeLab.get(getActivity()).getCrime(crimeId); } @TargetApi(Build.VERSION_CODES.HONEYCOMB) @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.fragment_crime, container, false); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { if (NavUtils.getParentActivityName(getActivity()) != null) { getActivity().getActionBar().setDisplayHomeAsUpEnabled(true); } } assert v != null; mTitleField = (EditText) v.findViewById(R.id.crime_title); mTitleField.setText(mCrime.getTitle()); mTitleField.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { // not yet } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { mCrime.setTitle(s.toString()); } @Override public void afterTextChanged(Editable s) { // not yet } }); mPhotoButton = (ImageButton) v.findViewById(R.id.crime_imageButton); mPhotoButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(getActivity(), CrimeCameraActivity.class); startActivityForResult(intent, REQUEST_PHOTO); } }); // If camera is not available, disable the photo button PackageManager packageManager = getActivity().getPackageManager(); if (!packageManager.hasSystemFeature(PackageManager.FEATURE_CAMERA) && !packageManager.hasSystemFeature(PackageManager.FEATURE_CAMERA_FRONT)) { mPhotoButton.setEnabled(false); } mPhotoView = (ImageView) v.findViewById(R.id.crime_imageView); mPhotoView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Photo photo = mCrime.getPhoto(); if (photo == null) { return; } FragmentManager fm = getActivity().getSupportFragmentManager(); String path = getActivity().getFileStreamPath(photo.getFilename()).getAbsolutePath(); ImageFragment.newInstance(path).show(fm, DIALOG_IMAGE); } }); mDateButton = (Button) v.findViewById(R.id.crime_date); updateDate(); mDateButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { FragmentManager fm = getActivity().getSupportFragmentManager(); DatePickerFragment dialogView = DatePickerFragment.newInstance(mCrime.getDate()); dialogView.setTargetFragment(CrimeFragment.this, REQUEST_DATE); dialogView.show(fm, DIALOG_DATE); } }); mSolvedCheckBox = (CheckBox) v.findViewById(R.id.crime_solved); mSolvedCheckBox.setChecked(mCrime.isSolved()); mSolvedCheckBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { mCrime.setSolved(isChecked); } }); mReportButton = (Button) v.findViewById(R.id.crime_reportButton); mReportButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(Intent.ACTION_SEND); intent.setType("text/plain"); intent.putExtra(Intent.EXTRA_TEXT, getCrimeReport()); intent.putExtra(Intent.EXTRA_SUBJECT, getString(R.string.crime_report_subject)); intent = Intent.createChooser(intent, getString(R.string.send_report)); startActivity(intent); } }); mSuspectButton = (Button) v.findViewById(R.id.crime_suspectButton); mSuspectButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.CommonDataKinds.Phone.CONTENT_URI); startActivityForResult(intent, REQUEST_CONTACT); } }); if (mCrime.getSuspect() != null) { mSuspectButton.setText(mCrime.getSuspect()); } mCallButton = (Button) v.findViewById(R.id.crime_callButton); mCallButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (mCrime.getPhoneNum() != null) { Uri number = Uri.parse("tel:" + mCrime.getPhoneNum()); Intent intent = new Intent(Intent.ACTION_DIAL, number); startActivity(intent); } } }); mCallButton.setEnabled(mCrime.getPhoneNum() != null); return v; } @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { super.onCreateOptionsMenu(menu, inflater); inflater.inflate(R.menu.fragment_crime, menu); } @Override public void onPause() { super.onPause(); CrimeLab.get(getActivity()).saveCrimes(); } @Override public void onStart() { super.onStart(); showPhoto(); } @Override public void onStop() { super.onStop(); PictureUtils.cleanImageView(mPhotoView); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: if (NavUtils.getParentActivityName(getActivity()) != null) { NavUtils.navigateUpFromSameTask(getActivity()); } return true; case R.id.menu_item_delete_crime: CrimeLab.get(getActivity()).delete(mCrime); getActivity().finish(); return true; default: return super.onOptionsItemSelected(item); } } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode != Activity.RESULT_OK) return; if (requestCode == REQUEST_DATE) { Date date = (Date) data.getSerializableExtra(DatePickerFragment.EXTRA_DATE); mCrime.setDate(date); updateDate(); } else if (requestCode == REQUEST_PHOTO) { // Create new photo object and attach to Crime object String filename = data.getStringExtra(CrimeCameraFragment.EXTRA_PHOTO_FILENAME); int orientation = data.getIntExtra(CrimeCameraFragment.EXTRA_PHOTO_ORIENTATION, Configuration.ORIENTATION_LANDSCAPE); if (filename != null) { // delete existing photo, if it exists if (mCrime.getPhoto() != null) { Photo oldPhoto = mCrime.getPhoto(); getActivity().deleteFile(oldPhoto.getFilename()); } Photo photo = new Photo(filename, orientation); mCrime.setPhoto(photo); showPhoto(); } } else if (requestCode == REQUEST_CONTACT) { Uri contactUri = data.getData(); // Specify which fields the query should return values for String[] queryFields = new String[] { ContactsContract.Contacts.DISPLAY_NAME, ContactsContract.CommonDataKinds.Phone.NUMBER }; // Perform query (contactUri behaves like a "where" clause) Cursor cursor = getActivity().getContentResolver().query(contactUri, queryFields, null, null, null); // Assert we actually got results if (cursor.getCount() == 0) { cursor.close(); return; } // Pull out the first column of the first row of data cursor.moveToFirst(); String suspect = cursor.getString(0); mCrime.setSuspect(suspect); mSuspectButton.setText(suspect); String phoneNum = cursor.getString(1); if (phoneNum != null) { mCrime.setPhoneNum(phoneNum); } cursor.close(); } } private void updateDate() { mDateButton.setText(mCrime.getDate().toString()); } @TargetApi(Build.VERSION_CODES.HONEYCOMB) private void showPhoto() { // (Re)set the image button's image based on the photo Photo photo = mCrime.getPhoto(); BitmapDrawable bitmapDrawable = null; if (photo != null) { String path = getActivity().getFileStreamPath(photo.getFilename()).getAbsolutePath(); bitmapDrawable = PictureUtils.getScaledDrawable(getActivity(), path); if (photo.getOrientation() == Configuration.ORIENTATION_PORTRAIT) { bitmapDrawable = PictureUtils.getPortraitDrawable(mPhotoView, bitmapDrawable); } } mPhotoView.setImageDrawable(bitmapDrawable); } private String getCrimeReport() { String solvedString = null; if (mCrime.isSolved()) { solvedString = getString(R.string.crime_report_solved); } else { solvedString = getString(R.string.crime_report_unsolved); } String dateFormat = "EEE, MMM dd"; String dateString = String.valueOf(DateFormat.format(dateFormat, mCrime.getDate())); String suspect = mCrime.getSuspect(); if (suspect == null) { suspect = getString(R.string.crime_report_no_suspect); } else { suspect = getString(R.string.crime_report_suspect, suspect); } String report = getString(R.string.crime_report, mCrime.getTitle(), dateString, solvedString, suspect); return report; } }