diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml deleted file mode 100644 index 30aa626..0000000 --- a/.idea/codeStyles/Project.xml +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 0b6820d..b971a12 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -26,4 +26,7 @@ dependencies { androidTestImplementation 'com.android.support.test:runner:1.0.2' implementation project(':congressdataapiaccess-debug') androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' + implementation 'com.android.support:recyclerview-v7:28.0.0' + implementation 'com.android.support:cardview-v7:28.0.0' + implementation 'android.arch.lifecycle:extensions:1.1.1' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 26b1cb9..57dba39 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -2,6 +2,8 @@ + + + diff --git a/app/src/main/java/com/lambdaschool/congressdetails/CongressPeopleListAdapter.java b/app/src/main/java/com/lambdaschool/congressdetails/CongressPeopleListAdapter.java new file mode 100644 index 0000000..b2083cb --- /dev/null +++ b/app/src/main/java/com/lambdaschool/congressdetails/CongressPeopleListAdapter.java @@ -0,0 +1,86 @@ +package com.lambdaschool.congressdetails; + +import android.content.Intent; +import android.support.annotation.NonNull; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import com.lambdaschool.congressdataapiaccess.CongresspersonOverview; + +import java.util.ArrayList; + +public class CongressPeopleListAdapter extends RecyclerView.Adapter { + ArrayList dataList; + + public CongressPeopleListAdapter(ArrayList dataList) { + this.dataList = dataList; + } + + @NonNull + @Override + public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) { + View itemView = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.congress_people_list_item, viewGroup, false); + return new ViewHolder(itemView); + } + + @Override + public void onBindViewHolder(@NonNull final ViewHolder vh, int i) { + final CongresspersonOverview data = dataList.get(i); + String displayDOB = "DOB: " + data.getDateOfBirth(); + String displayGender = "Gender: " + data.getGender(); + String displayState = "State: " + data.getState(); + String displayFacebook = "Facebook: " + data.getFacebookAccount(); + String displayTwitter = "Twitter: " + data.getTwitterAccount(); + String displayYoutube = "Youtube: " + data.getYoutubeAccount(); + String displayTitle = data.getShortTitle() + " " + data.getFirstName() + " " + data.getLastName(); + + vh.textDOB.setText(displayDOB); + vh.textFacebook.setText(displayFacebook); + vh.textGender.setText(displayGender); + vh.textParty.setText(data.getParty()); + vh.textState.setText(displayState); + vh.textTwitter.setText(displayTwitter); + vh.textYoutube.setText(displayYoutube); + vh.textTitle.setText(displayTitle); + vh.parent.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent = new Intent(vh.parent.getContext(), DetailsActivity.class); + intent.putExtra(CongressRepository.CONGRESS_INTENT_KEY, data.getId()); + vh.parent.getContext().startActivity(intent); + } + }); + } + + @Override + public int getItemCount() { + return dataList.size(); + } + + public class ViewHolder extends RecyclerView.ViewHolder { + TextView textTitle; + TextView textParty; + TextView textDOB; + TextView textGender; + TextView textState; + TextView textFacebook; + TextView textTwitter; + TextView textYoutube; + View parent; + public ViewHolder(@NonNull View itemView) { + super(itemView); + parent = itemView.findViewById(R.id.parent); + textTitle = itemView.findViewById(R.id.text_title); + textParty = itemView.findViewById(R.id.text_party); + textDOB = itemView.findViewById(R.id.text_dob); + textGender = itemView.findViewById(R.id.text_gender); + textState = itemView.findViewById(R.id.text_state); + textFacebook = itemView.findViewById(R.id.text_facebook); + textTwitter = itemView.findViewById(R.id.text_twitter); + textYoutube = itemView.findViewById(R.id.text_youtube); + } + } +} diff --git a/app/src/main/java/com/lambdaschool/congressdetails/CongressPersonRepository.java b/app/src/main/java/com/lambdaschool/congressdetails/CongressPersonRepository.java new file mode 100644 index 0000000..d2a77dd --- /dev/null +++ b/app/src/main/java/com/lambdaschool/congressdetails/CongressPersonRepository.java @@ -0,0 +1,24 @@ +package com.lambdaschool.congressdetails; + +import android.arch.lifecycle.MutableLiveData; + +import com.lambdaschool.congressdataapiaccess.CongresspersonDetails; + +public class CongressPersonRepository { + private CongresspersonDetails data; + + public CongressPersonRepository() { + data = new CongresspersonDetails(); + } + + public CongresspersonDetails updateData(CongresspersonDetails person){ + data = person; + return data; + } + + public MutableLiveData getData(){ + MutableLiveData liveData = new MutableLiveData<>(); + liveData.setValue(data); + return liveData; + } +} diff --git a/app/src/main/java/com/lambdaschool/congressdetails/CongressPersonViewModel.java b/app/src/main/java/com/lambdaschool/congressdetails/CongressPersonViewModel.java new file mode 100644 index 0000000..5f6089a --- /dev/null +++ b/app/src/main/java/com/lambdaschool/congressdetails/CongressPersonViewModel.java @@ -0,0 +1,28 @@ +package com.lambdaschool.congressdetails; + +import android.arch.lifecycle.LiveData; +import android.arch.lifecycle.MutableLiveData; +import android.arch.lifecycle.ViewModel; + +import com.lambdaschool.congressdataapiaccess.CongresspersonDetails; + +public class CongressPersonViewModel extends ViewModel { + private MutableLiveData data; + private CongressPersonRepository repo; + + public LiveData getPerson(){ + if(data == null){ + loadData(); + } + return data; + } + + private void loadData(){ + repo = new CongressPersonRepository(); + data = repo.getData(); + } + + public void updateData(CongresspersonDetails person){ + data.setValue(repo.updateData(person)); + } +} diff --git a/app/src/main/java/com/lambdaschool/congressdetails/CongressRepository.java b/app/src/main/java/com/lambdaschool/congressdetails/CongressRepository.java new file mode 100644 index 0000000..dc164f5 --- /dev/null +++ b/app/src/main/java/com/lambdaschool/congressdetails/CongressRepository.java @@ -0,0 +1,28 @@ +package com.lambdaschool.congressdetails; + +import android.arch.lifecycle.MutableLiveData; + +import com.lambdaschool.congressdataapiaccess.CongresspersonOverview; + +import java.util.ArrayList; + +public class CongressRepository { + public static final String CONGRESS_INTENT_KEY = "Person"; + private ArrayList data; + + public CongressRepository() { + data = new ArrayList<>(); + } + + public ArrayList UpdateData(CongresspersonOverview person){ + data.add(person); + return data; + } + + public MutableLiveData> getData (){ + MutableLiveData> liveData = new MutableLiveData<>(); + liveData.setValue(data); + + return liveData; + } +} diff --git a/app/src/main/java/com/lambdaschool/congressdetails/CongressViewModel.java b/app/src/main/java/com/lambdaschool/congressdetails/CongressViewModel.java new file mode 100644 index 0000000..6f157fc --- /dev/null +++ b/app/src/main/java/com/lambdaschool/congressdetails/CongressViewModel.java @@ -0,0 +1,30 @@ +package com.lambdaschool.congressdetails; + +import android.arch.lifecycle.LiveData; +import android.arch.lifecycle.MutableLiveData; +import android.arch.lifecycle.ViewModel; + +import com.lambdaschool.congressdataapiaccess.CongresspersonOverview; + +import java.util.ArrayList; + +public class CongressViewModel extends ViewModel { + private MutableLiveData> data; + private CongressRepository repo; + + public LiveData> getCongress(){ + if(data == null){ + loadData(); + } + return data; + } + + private void loadData(){ + repo = new CongressRepository(); + data = repo.getData(); + } + + public void updateData(CongresspersonOverview person){ + data.setValue(repo.UpdateData(person)); + } +} diff --git a/app/src/main/java/com/lambdaschool/congressdetails/DetailsActivity.java b/app/src/main/java/com/lambdaschool/congressdetails/DetailsActivity.java new file mode 100644 index 0000000..7ff469d --- /dev/null +++ b/app/src/main/java/com/lambdaschool/congressdetails/DetailsActivity.java @@ -0,0 +1,79 @@ +package com.lambdaschool.congressdetails; + +import android.arch.lifecycle.Observer; +import android.arch.lifecycle.ViewModelProviders; +import android.content.Intent; +import android.support.annotation.Nullable; +import android.support.v7.app.AppCompatActivity; +import android.os.Bundle; +import android.widget.TextView; + +import com.lambdaschool.congressdataapiaccess.CongressDao; +import com.lambdaschool.congressdataapiaccess.CongresspersonDetails; +import com.lambdaschool.congressdataapiaccess.CongresspersonOverview; + +public class DetailsActivity extends AppCompatActivity { + + TextView textTitle; + TextView textParty; + TextView textDOB; + TextView textWebsite; + TextView textTrackId; + TextView textTwitter; + TextView textFacebook; + CongresspersonDetails person; + CongressPersonViewModel viewModel; + + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_details); + + viewModel = ViewModelProviders.of(this).get(CongressPersonViewModel.class); + viewModel.getPerson().observe(this, new Observer() { + @Override + public void onChanged(@Nullable CongresspersonDetails congresspersonDetails) { + person = congresspersonDetails; + updateUI(person); + } + }); + + Intent intent = getIntent(); + if(intent.getExtras() != null){ + final String personId = intent.getStringExtra(CongressRepository.CONGRESS_INTENT_KEY); + new Thread(new Runnable() { + @Override + public void run() { + final CongresspersonDetails networkPerson = CongressDao.getMemberDetails(personId); + + runOnUiThread(new Runnable() { + @Override + public void run() { + viewModel.updateData(networkPerson); + } + }); + } + }).start(); + } + + textTitle = findViewById(R.id.text_title); + textParty = findViewById(R.id.text_party); + textDOB = findViewById(R.id.text_dob); + textWebsite = findViewById(R.id.text_website); + textTrackId = findViewById(R.id.text_track_id); + textTwitter = findViewById(R.id.text_twitter); + textFacebook = findViewById(R.id.text_facebook); + } + + private void updateUI(CongresspersonDetails person){ + textTitle.setText(String.format("%s %s", person.getFirstName(), person.getLastName())); + textParty.setText(String.format("Party: %s", person.getCurrentParty())); + textDOB.setText(String.format("Date of Birth: %s", person.getDateOfBirth())); + textWebsite.setText(String.format("Website: %s", person.getUrl())); + textTrackId.setText(String.format("Gov Track ID: %s", person.getGovtrackId())); + textTwitter.setText(String.format("Twitter: %s", person.getTwitterAccount())); + textFacebook.setText(String.format("Facebook: %s", person.getFacebookAccount())); + + } +} diff --git a/app/src/main/java/com/lambdaschool/congressdetails/ListActivity.java b/app/src/main/java/com/lambdaschool/congressdetails/ListActivity.java index 8be745a..d791173 100644 --- a/app/src/main/java/com/lambdaschool/congressdetails/ListActivity.java +++ b/app/src/main/java/com/lambdaschool/congressdetails/ListActivity.java @@ -1,18 +1,66 @@ package com.lambdaschool.congressdetails; +import android.arch.lifecycle.Observer; +import android.arch.lifecycle.ViewModelProviders; +import android.content.Context; +import android.support.annotation.Nullable; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; import com.lambdaschool.congressdataapiaccess.CongressDao; +import com.lambdaschool.congressdataapiaccess.CongresspersonOverview; + +import java.util.ArrayList; public class ListActivity extends AppCompatActivity { + ArrayList congressPeople; + CongressPeopleListAdapter listAdapter; + Context context; + private CongressViewModel viewModel; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_list); + context = this; + congressPeople = new ArrayList<>(); + listAdapter = new CongressPeopleListAdapter(congressPeople); + RecyclerView recyclerView = findViewById(R.id.recycler_view); + recyclerView.setAdapter(listAdapter); + recyclerView.setLayoutManager(new LinearLayoutManager(context)); + viewModel = ViewModelProviders.of(this).get(CongressViewModel.class); + viewModel.getCongress().observe(this, new Observer>() { + @Override + public void onChanged(@Nullable ArrayList congresspersonOverviews) { + if(congresspersonOverviews != null) { + for(CongresspersonOverview person: congresspersonOverviews){ + if(!congressPeople.contains(person)) { + congressPeople.add(person); + } + } + } + listAdapter.notifyDataSetChanged(); + } + }); + new Thread(new Runnable() { + @Override + public void run() { + final ArrayList networkList = CongressDao.getAllMembers(); + runOnUiThread(new Runnable() { + @Override + public void run() { + for(CongresspersonOverview person: networkList){ + viewModel.updateData(person); + + } + } + }); + } + }).start(); - CongressDao.getAllMembers(); } } diff --git a/app/src/main/res/layout/activity_details.xml b/app/src/main/res/layout/activity_details.xml new file mode 100644 index 0000000..96bef3c --- /dev/null +++ b/app/src/main/res/layout/activity_details.xml @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_list.xml b/app/src/main/res/layout/activity_list.xml index 1884df2..ec28d23 100644 --- a/app/src/main/res/layout/activity_list.xml +++ b/app/src/main/res/layout/activity_list.xml @@ -6,13 +6,11 @@ android:layout_height="match_parent" tools:context=".ListActivity"> - + \ No newline at end of file diff --git a/app/src/main/res/layout/congress_people_list_item.xml b/app/src/main/res/layout/congress_people_list_item.xml new file mode 100644 index 0000000..ebc738a --- /dev/null +++ b/app/src/main/res/layout/congress_people_list_item.xml @@ -0,0 +1,92 @@ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file