Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

1. Add the choice of a background color to the settings activity. Create a coupl

ID: 3757217 • Letter: 1

Question

1. Add the choice of a background color to the settings activity. Create a couple of new color resources in color.xml. Add these choices as a RadioGroup to the settings screen. You will have to modify the layout to place all the RadioGroups in a ScrollView so that you can see them all Make the choice persist in a SharedPreferences object. Use the following command in the onCreate method of the settings activity to set the chosen background color: scrollviewobject.setBackgroundResource (R.color.colorresourcename);

Explanation / Answer

Contact.java

program:


import android.text.format.Time;

public class Contact {
private int contactID;
private String contactName;
private String streetAddress;
private String city;
private String state;
private String zipCode;
private String phoneNumber;
private String cellNumber;
private String email;
private Time birthday;
  
public Contact(){
contactID = -1;
Time t = new Time();
t.setToNow();
birthday = t;
}

public int getContactID(){
return contactID;
}
public void setContactID(int i){
contactID = i;
}
public String getContactName(){
return contactName;
}
public void setContactName(String s){
contactName = s;
}
public Time getBirthday(){
return birthday;
}
public void setBirthday(Time t){
birthday = t;
}
public String getStreetAddress(){
return streetAddress;
}
public void setStreetAddress(String s){
streetAddress = s;
}
public String getCity(){
return city;
}
public void setCity(String s){
city = s;
}
public String getState(){
return state;
}
public void setState(String s){
state = s;
}
public String getZipCode(){
return zipCode;
}
public void setZipCode(String s){
zipCode = s;
}
public String getPhoneNumber(){
return phoneNumber;
}
public void setPhoneNumber(String s){
phoneNumber = s;
}
public String getCellNumber(){
return cellNumber;
}
public void setCellNumber(String s){
cellNumber = s;
}
public String getEMail(){
return email;
}
public void setEMail(String s){
email = s;
}
}

ContactActivity.java

import android.content.Context;
import android.content.Intent;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.telephony.PhoneNumberFormattingTextWatcher;
import android.text.Editable;
import android.text.TextWatcher;
import android.text.format.DateFormat;
import android.text.format.Time;
import android.text.style.BackgroundColorSpan;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.inputmethod.InputMethodManager;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.ScrollView;
import android.widget.TextView;
import android.widget.ToggleButton;

import com.example.mycontactlist.DatePickerDialog.SaveDateListener;

public class ContactActivity extends FragmentActivity implements SaveDateListener {

private Contact currentContact;
  
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_contact);
  
initListButton();
initMapButton();
initSettingsButton();
initToggleButton();
initSaveButton();
setForEditing(false);
  
initChangeDateButton();
initTextChangedEvents();
currentContact = new Contact();
}


@Override
public boolean onCreateOptionsMenu(Menu menu) {
  
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.contact, menu);
return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
  
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}

private void initListButton(){
ImageButton list = (ImageButton)findViewById(R.id.imageButtonList);
list.setOnClickListener(new View.OnClickListener() {
public void onClick (View v){
Intent intent = new Intent(ContactActivity.this, ContactListActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
}
});
}
  
private void initMapButton(){
ImageButton map = (ImageButton)findViewById(R.id.imageButtonMap);
map.setOnClickListener(new View.OnClickListener() {
public void onClick (View v){
Intent intent = new Intent(ContactActivity.this, ContactMapActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
}
});
}
  
private void initSettingsButton(){
ImageButton settings = (ImageButton)findViewById(R.id.imageButtonSettings);
settings.setOnClickListener(new View.OnClickListener() {
public void onClick (View v){
Intent intent = new Intent(ContactActivity.this, ContactSettingsActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
}
});
}
  
private void initToggleButton(){
final ToggleButton editToggle = (ToggleButton)findViewById(R.id.toggleButtonEdit);
editToggle.setOnClickListener(new OnClickListener(){
  
@Override
public void onClick(View arg0){
setForEditing(editToggle.isChecked());
}
});
}
  
private void setForEditing(boolean enabled){
EditText editName = (EditText)findViewById(R.id.editName);
EditText editAddress = (EditText)findViewById(R.id.editAddress);
EditText editCity = (EditText)findViewById(R.id.editCity);
EditText editState = (EditText)findViewById(R.id.editState);
EditText editZipCode = (EditText)findViewById(R.id.editZipcode);
EditText editPhone = (EditText)findViewById(R.id.editHome);
EditText editCell = (EditText)findViewById(R.id.editCell);
EditText editEmail = (EditText)findViewById(R.id.editEMail);
Button buttonChange = (Button)findViewById(R.id.btnBirthday);
Button buttonSave = (Button)findViewById(R.id.buttonSave);

editName.setEnabled(enabled);
editAddress.setEnabled(enabled);
editCity.setEnabled(enabled);
editState.setEnabled(enabled);
editZipCode.setEnabled(enabled);
editPhone.setEnabled(enabled);
editCell.setEnabled(enabled);
editEmail.setEnabled(enabled);
buttonChange.setEnabled(enabled);
buttonSave.setEnabled(enabled);
  
if(enabled){
editName.requestFocus();
editName.setBackgroundColor(getResources().getColor(R.color.dataEntry_background));
editAddress.setBackgroundColor(getResources().getColor(R.color.dataEntry_background));
editCity.setBackgroundColor(getResources().getColor(R.color.dataEntry_background));
editState.setBackgroundColor(getResources().getColor(R.color.dataEntry_background));
editZipCode.setBackgroundColor(getResources().getColor(R.color.dataEntry_background));
editPhone.setBackgroundColor(getResources().getColor(R.color.dataEntry_background));
editCell.setBackgroundColor(getResources().getColor(R.color.dataEntry_background));
editEmail.setBackgroundColor(getResources().getColor(R.color.dataEntry_background));
}
else{
ScrollView s = (ScrollView)findViewById(R.id.scrollView1);
s.fullScroll(ScrollView.FOCUS_UP);
s.clearFocus();
editName.setBackgroundResource(android.R.drawable.editbox_background_normal);
editAddress.setBackgroundResource(android.R.drawable.editbox_background_normal);
editCity.setBackgroundResource(android.R.drawable.editbox_background_normal);
editState.setBackgroundResource(android.R.drawable.editbox_background_normal);
editZipCode.setBackgroundResource(android.R.drawable.editbox_background_normal);
editPhone.setBackgroundResource(android.R.drawable.editbox_background_normal);
editCell.setBackgroundResource(android.R.drawable.editbox_background_normal);
editEmail.setBackgroundResource(android.R.drawable.editbox_background_normal);
}
}
  
private void hideKeyboard(){
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
EditText editName = (EditText)findViewById(R.id.editName);
imm.hideSoftInputFromWindow(editName.getWindowToken(), 0);
EditText editAddress = (EditText)findViewById(R.id.editAddress);
imm.hideSoftInputFromInputMethod(editAddress.getWindowToken(), 0);
EditText editCity = (EditText)findViewById(R.id.editCity);
imm.hideSoftInputFromInputMethod(editCity.getWindowToken(), 0);
EditText editState = (EditText)findViewById(R.id.editState);
imm.hideSoftInputFromInputMethod(editState.getWindowToken(), 0);
EditText editZipcode = (EditText)findViewById(R.id.editZipcode);
imm.hideSoftInputFromInputMethod(editZipcode.getWindowToken(), 0);
EditText editHomePhone = (EditText)findViewById(R.id.editHome);
imm.hideSoftInputFromInputMethod(editHomePhone.getWindowToken(), 0);
EditText editCellPhone = (EditText)findViewById(R.id.editCell);
imm.hideSoftInputFromInputMethod(editCellPhone.getWindowToken(), 0);
EditText editEmail = (EditText)findViewById(R.id.editEMail);
imm.hideSoftInputFromInputMethod(editEmail.getWindowToken(), 0);
}
  
@Override
public void didFinishDatePickerDialog(Time selectedTime) {
TextView birthDay = (TextView)findViewById(R.id.textBirthday);
birthDay.setText(DateFormat.format("MM/dd/yyyy", selectedTime.toMillis(false)).toString());
currentContact.setBirthday(selectedTime);
}
  
private void initChangeDateButton(){
Button changeDate = (Button)findViewById(R.id.btnBirthday);
changeDate.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v){
FragmentManager fm = getSupportFragmentManager();
DatePickerDialog datePickerDialog = new DatePickerDialog();
datePickerDialog.show(fm,"DatePick");
}
});
}
  
private void initSaveButton(){
Button saveButton = (Button)findViewById(R.id.buttonSave);
saveButton.setOnClickListener(new View.OnClickListener() {
  
@Override
public void onClick(View v){
hideKeyboard();
ContactDataSource ds = new ContactDataSource(ContactActivity.this);
ds.open();
  
boolean wasSuccessful = false;
if(currentContact.getContactID()==-1){
wasSuccessful = ds.insertContact(currentContact);
int newId = ds.getLastContactId();
currentContact.setContactID(newId);
}
else {
wasSuccessful = ds.updateContact(currentContact);
}
ds.close();
  
if(wasSuccessful){
ToggleButton editToggle = (ToggleButton)findViewById(R.id.toggleButtonEdit);
editToggle.toggle();
setForEditing(false);
}
}
});
}
  
private void initTextChangedEvents(){
final EditText contactName = (EditText)findViewById(R.id.editName);
contactName.addTextChangedListener(new TextWatcher(){
public void afterTextChanged(Editable s){
currentContact.setContactName(contactName.getText().toString());
}
public void beforeTextChanged(CharSequence arg0, int ar1, int arg2, int arg3){
// auto-generated method stub?
}
public void onTextChanged(CharSequence s, int start, int before, int count){
// auto-generated method stub?
}
});
final EditText streetAddress = (EditText)findViewById(R.id.editAddress);
streetAddress.addTextChangedListener(new TextWatcher(){
public void afterTextChanged(Editable s){
currentContact.setStreetAddress(streetAddress.getText().toString());
}
public void beforeTextChanged(CharSequence arg0, int ar1, int arg2, int arg3){
// auto-generated method stub?
}
public void onTextChanged(CharSequence s, int start, int before, int count){
// auto-generated method stub?
}
});
final EditText city = (EditText)findViewById(R.id.editCity);
city.addTextChangedListener(new TextWatcher(){
public void afterTextChanged(Editable s){
currentContact.setCity(city.getText().toString());
}
public void beforeTextChanged(CharSequence arg0, int ar1, int arg2, int arg3){
// auto-generated method stub?
}
public void onTextChanged(CharSequence s, int start, int before, int count){
// auto-generated method stub?
}
});
final EditText state = (EditText)findViewById(R.id.editState);
state.addTextChangedListener(new TextWatcher(){
public void afterTextChanged(Editable s){
currentContact.setState(state.getText().toString());
}
public void beforeTextChanged(CharSequence arg0, int ar1, int arg2, int arg3){
// auto-generated method stub?
}
public void onTextChanged(CharSequence s, int start, int before, int count){
// auto-generated method stub?
}
});
final EditText zipCode = (EditText)findViewById(R.id.editZipcode);
zipCode.addTextChangedListener(new TextWatcher(){
public void afterTextChanged(Editable s){
currentContact.setZipCode(zipCode.getText().toString());
}
public void beforeTextChanged(CharSequence arg0, int ar1, int arg2, int arg3){
// auto-generated method stub?
}
public void onTextChanged(CharSequence s, int start, int before, int count){
// auto-generated method stub?
}
});
final EditText email = (EditText)findViewById(R.id.editEMail);
zipCode.addTextChangedListener(new TextWatcher(){
public void afterTextChanged(Editable s){
currentContact.setEMail(email.getText().toString());
}
public void beforeTextChanged(CharSequence arg0, int ar1, int arg2, int arg3){
// auto-generated method stub?
}
public void onTextChanged(CharSequence s, int start, int before, int count){
// auto-generated method stub?
}
});
final EditText homephone = (EditText)findViewById(R.id.editHome);
homephone.addTextChangedListener(new TextWatcher(){
public void afterTextChanged(Editable s){
currentContact.setPhoneNumber(homephone.getText().toString());
}
public void beforeTextChanged(CharSequence arg0, int ar1, int arg2, int arg3){
// auto-generated method stub?
}
public void onTextChanged(CharSequence s, int start, int before, int count){
// auto-generated method stub?
}
});
final EditText cellphone = (EditText)findViewById(R.id.editCell);
cellphone.addTextChangedListener(new TextWatcher(){
public void afterTextChanged(Editable s){
currentContact.setCellNumber(cellphone.getText().toString());
}
public void beforeTextChanged(CharSequence arg0, int ar1, int arg2, int arg3){
// auto-generated method stub?
}
public void onTextChanged(CharSequence s, int start, int before, int count){
// auto-generated method stub?
}
});
homephone.addTextChangedListener(new PhoneNumberFormattingTextWatcher());
cellphone.addTextChangedListener(new PhoneNumberFormattingTextWatcher());
}

}

ContactAdapter.java


import java.util.ArrayList;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.TextView;

public class ContactAdapter extends ArrayAdapter<Contact>{
private ArrayList<Contact> items;
private Context adapterContext;
  
public ContactAdapter (Context context, ArrayList<Contact> items){
super(context, R.layout.list_item, items);
adapterContext = context;
this.items = items;
}
  
@Override
public View getView(int position, View convertView, ViewGroup parent){
View v = convertView;
try{
Contact contact = items.get(position);
  
if(v == null){
LayoutInflater vi = (LayoutInflater)adapterContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.list_item, null);
}
  
TextView contactName = (TextView)v.findViewById(R.id.textContactName);
TextView contactNumber = (TextView)v.findViewById(R.id.textPhoneNumber);
Button b = (Button)v.findViewById(R.id.buttonDeleteContact);
contactName.setText(contact.getContactName());
contactNumber.setText(contact.getPhoneNumber());
b.setVisibility(View.INVISIBLE);
}
catch(Exception e){
e.printStackTrace();
e.getCause();
}
return v;
}
public void showDelete(final int position, final View convertView, final Context context, final Contact contact){
View v = convertView;
final Button b = (Button)v.findViewById(R.id.buttonDeleteContact);
  
if(b.getVisibility()==View.INVISIBLE){
b.setVisibility(View.VISIBLE);
b.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
hideDelete(position,convertView,context);
items.remove(contact);
deleteOption(contact.getContactID(),context);
}
});
}
else{
hideDelete(position,convertView,context);
}
}
  
private void deleteOption(int contactToDelete,Context context){
ContactDataSource db = new ContactDataSource(context);
db.open();
db.deleteContact(contactToDelete);
db.close();
this.notifyDataSetChanged();
}
  
public void hideDelete(int position, View convertView, Context context){
View v = convertView;
final Button b = (Button) v.findViewById(R.id.buttonDeleteContact);
b.setVisibility(View.INVISIBLE);
b.setOnClickListener(null);
}
}

ContactAddress.java

public class ContactAddress {

private String streetAddress;

public void setAddress(String s)
{
streetAddress = s;
}
public String getAddress(){
return streetAddress;
}
}

ContactDBHelper.java


import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

public class ContactDBHelper extends SQLiteOpenHelper{
  
private static final String DATABASE_NAME = "mycontacts.db";
private static final int DATABASE_VERSION = 2;
  
// Database creation sql statement
private static final String CREATE_TABLE_CONTACT = "create table contact (_id integer primary key autoincrement, "
+ "contactname text not null, streetaddress text, "
+ "city text, state text, zipcode text, "
+ "phonenumber text, cellnumber text, "
+ "email text, birthday text, BFF integer);";
  
public ContactDBHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
  
@Override
public void onCreate(SQLiteDatabase database){
database.execSQL(CREATE_TABLE_CONTACT);
}
  
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){
Log.w(ContactDBHelper.class.getName(),
"Upgrading database from version " + oldVersion + " to "
+ newVersion + ", which should save all old data");
db.execSQL("ALTER TABLE contact ADD COLUMN BFF integer");
//onCreate(db);
}
}


ContactDataSource.java


import java.util.ArrayList;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.text.format.Time;
import android.util.Log;

public class ContactDataSource {
private SQLiteDatabase database;
private ContactDBHelper dbHelper;
  
public ContactDataSource(Context context){
dbHelper = new ContactDBHelper(context);
}
  
public void open() throws SQLException{
database = dbHelper.getWritableDatabase();
}
  
public void close(){
dbHelper.close();
}

public boolean insertContact(Contact c){
boolean didSucceed = false;
try{
ContentValues initialValues = new ContentValues();
  
initialValues.put("contactname", c.getContactName());
initialValues.put("streetaddress", c.getStreetAddress());
initialValues.put("city", c.getCity());
initialValues.put("state", c.getState());
initialValues.put("zipcode", c.getZipCode());
initialValues.put("phonenumber", c.getPhoneNumber());
initialValues.put("cellnumber", c.getCellNumber());
initialValues.put("email", c.getEMail());
initialValues.put("birthday", String.valueOf(c.getBirthday().toMillis(false)));
  
didSucceed = database.insert("contact", null, initialValues) > 0;
}
catch (Exception e){
// Do nothing---will return false if there is an exception
}
return didSucceed;
}

public boolean updateContact(Contact c){
boolean didSucceed = false;
try{
Long rowId = Long.valueOf(c.getContactID());
ContentValues updateValues = new ContentValues();
  
updateValues.put("contactname", c.getContactName());
updateValues.put("streetaddress", c.getStreetAddress());
updateValues.put("city", c.getCity());
updateValues.put("state", c.getState());
updateValues.put("zipcode", c.getZipCode());
updateValues.put("phonenumber", c.getPhoneNumber());
updateValues.put("cellnumber", c.getCellNumber());
updateValues.put("email", c.getEMail());
updateValues.put("birthday", String.valueOf(c.getBirthday().toMillis(false)));
  
didSucceed = database.update("contact", updateValues, "_id=" + rowId, null) > 0;
}
catch (Exception e){
// Do nothing---will return false if exception
}
return didSucceed;
}
  
public boolean updateAddress(Contact c, ContactAddress cAdd){
boolean didSucceed = false;
try{
Long rowId = Long.valueOf(c.getContactID());
ContentValues updateValues = new ContentValues();
  
updateValues.put("streetaddress", cAdd.getAddress());
  
didSucceed = database.update("contact", updateValues, "_id=" + rowId, null) > 0;
}
catch (Exception e){
// Do nothing---will return false if exception
}
return didSucceed;
}
  
public int getLastContactId(){
int lastId = -1;
try{
String query = "Select MAX(_id) from contact";
Cursor cursor = database.rawQuery(query, null);
  
cursor.moveToFirst();
lastId = cursor.getInt(0);
cursor.close();
}
catch (Exception e){
lastId = -1;
}
return lastId;
}
public String getlastContactName(){
String contactName = "";
String streetAddress = "";
String query = "SELECT contactname, streetaddress FROM contact";   
try{
Cursor cursor = database.rawQuery(query, null);
cursor.moveToFirst();
  
while(!cursor.isAfterLast()){
contactName = cursor.getString(0);
streetAddress = cursor.getString(1);
cursor.moveToNext();
}
cursor.close();
}
catch(Exception e){
  
}
return contactName + ", " + streetAddress;
}
public ArrayList<String> getContactName(){
ArrayList<String> contactNames = new ArrayList<String>();
try{
String query = "Select contactname from contact";
Cursor