diff --git a/app/build.gradle b/app/build.gradle index b036fea..1d7e22a 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -16,13 +16,20 @@ android { proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } } dependencies { - implementation fileTree(dir: 'libs', include: ['*.jar']) + implementation fileTree(include: ['*.jar'], dir: 'libs') implementation 'com.android.support:appcompat-v7:28.0.0-rc02' implementation 'com.android.support.constraint:constraint-layout:1.1.3' testImplementation 'junit:junit:4.12' androidTestImplementation 'com.android.support.test:runner:1.0.2' androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' + implementation 'android.arch.lifecycle:extensions:1.1.1' + implementation 'android.arch.lifecycle:viewmodel:1.1.1' + implementation project(':congressdataapiaccess-debug') } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 26b1cb9..5f347ea 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -2,13 +2,17 @@ + + + + android:theme="@style/AppTheme" + android:usesCleartextTraffic="true"> @@ -16,6 +20,7 @@ + \ No newline at end of file diff --git a/app/src/main/java/com/lambdaschool/congressdetails/CPDetailsRepo.java b/app/src/main/java/com/lambdaschool/congressdetails/CPDetailsRepo.java new file mode 100644 index 0000000..2fb1ce2 --- /dev/null +++ b/app/src/main/java/com/lambdaschool/congressdetails/CPDetailsRepo.java @@ -0,0 +1,16 @@ +package com.lambdaschool.congressdetails; + +import android.arch.lifecycle.MutableLiveData; + +import com.lambdaschool.congressdataapiaccess.CongresspersonDetails; +import com.lambdaschool.congressdataapiaccess.CongressDao; + + +public class CPDetailsRepo { + public static MutableLiveData getDetails(String id) { + final MutableLiveData liveDataList = new MutableLiveData<>(); + CongresspersonDetails details = CongressDao.getMemberDetails(id); + liveDataList.setValue(details); + return liveDataList; + } +} diff --git a/app/src/main/java/com/lambdaschool/congressdetails/CPDetailsViewModel.java b/app/src/main/java/com/lambdaschool/congressdetails/CPDetailsViewModel.java new file mode 100644 index 0000000..518b6aa --- /dev/null +++ b/app/src/main/java/com/lambdaschool/congressdetails/CPDetailsViewModel.java @@ -0,0 +1,25 @@ +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 CPDetailsViewModel extends ViewModel { + + private MutableLiveData liveDetails; + + public LiveData getDetails(String id) { + if (liveDetails == null) { + loadData(id); + } + return liveDetails; + } + + private void loadData(String id) { + liveDetails = CPDetailsRepo.getDetails(id); + + } + + +} diff --git a/app/src/main/java/com/lambdaschool/congressdetails/CPOverviewRepo.java b/app/src/main/java/com/lambdaschool/congressdetails/CPOverviewRepo.java new file mode 100644 index 0000000..3440c95 --- /dev/null +++ b/app/src/main/java/com/lambdaschool/congressdetails/CPOverviewRepo.java @@ -0,0 +1,18 @@ +package com.lambdaschool.congressdetails; + +import android.arch.lifecycle.MutableLiveData; +import android.arch.lifecycle.ViewModel; + +import com.lambdaschool.congressdataapiaccess.CongressDao; +import com.lambdaschool.congressdataapiaccess.CongresspersonOverview; + +import java.util.ArrayList; + +public class CPOverviewRepo extends ViewModel { + public static MutableLiveData> getOverviewList() { + final MutableLiveData> liveDataList = new MutableLiveData<>(); + ArrayList rawData = CongressDao.getAllMembers(); + liveDataList.setValue(rawData); + return liveDataList; + } +} diff --git a/app/src/main/java/com/lambdaschool/congressdetails/CPOverviewViewModel.java b/app/src/main/java/com/lambdaschool/congressdetails/CPOverviewViewModel.java new file mode 100644 index 0000000..0918f8b --- /dev/null +++ b/app/src/main/java/com/lambdaschool/congressdetails/CPOverviewViewModel.java @@ -0,0 +1,27 @@ +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; +import java.util.Collections; + +public class CPOverviewViewModel extends ViewModel { + private MutableLiveData> overviewList; + + public LiveData> getOverViewList() { + if (overviewList == null) { + loadList(); + } + + + return overviewList; + } + + private void loadList() { + overviewList = CPOverviewRepo.getOverviewList(); + } + +} diff --git a/app/src/main/java/com/lambdaschool/congressdetails/DetailsView.java b/app/src/main/java/com/lambdaschool/congressdetails/DetailsView.java new file mode 100644 index 0000000..2b9e53c --- /dev/null +++ b/app/src/main/java/com/lambdaschool/congressdetails/DetailsView.java @@ -0,0 +1,54 @@ +package com.lambdaschool.congressdetails; + +import android.arch.lifecycle.Observer; +import android.arch.lifecycle.ViewModelProviders; +import android.support.annotation.Nullable; +import android.support.v7.app.AppCompatActivity; +import android.os.Bundle; +import android.util.Log; +import android.widget.TextView; + +import com.lambdaschool.congressdataapiaccess.CongresspersonDetails; + + +public class DetailsView extends AppCompatActivity { + + TextView textName, textParty, textURL, textVotePercent; + CPDetailsViewModel viewModel; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_details_view); + textName = findViewById(R.id.text_name); + textParty = findViewById(R.id.text_party); + textURL = findViewById(R.id.text_url); +// textVotePercent = findViewById(R.id.text_vote_with_party); + + + String id = getIntent().getStringExtra("CPID"); + + if (id != null) { + viewModel = ViewModelProviders.of(this).get(CPDetailsViewModel.class); + viewModel.getDetails(id).observe(this, new Observer() { + @Override + public void onChanged(@Nullable CongresspersonDetails cpDetails) { + if (cpDetails != null) { + textName.setText(String.format("%s %s", cpDetails.getFirstName(), cpDetails.getLastName())); + String partyName = ""; + partyName = cpDetails.getCurrentParty(); + if (partyName.equals("R")) { + partyName = "Republican"; + } else if (partyName.equals("D")) { + partyName = "Democrat"; + } + textParty.setText(partyName); + textURL.setText(cpDetails.getUrl()); + } + } + }); + } + + + } +} diff --git a/app/src/main/java/com/lambdaschool/congressdetails/ListActivity.java b/app/src/main/java/com/lambdaschool/congressdetails/ListActivity.java index 3b2296e..dcd2f57 100644 --- a/app/src/main/java/com/lambdaschool/congressdetails/ListActivity.java +++ b/app/src/main/java/com/lambdaschool/congressdetails/ListActivity.java @@ -1,13 +1,75 @@ package com.lambdaschool.congressdetails; +import android.arch.lifecycle.Observer; +import android.content.Context; +import android.content.Intent; +import android.support.annotation.Nullable; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; +import android.util.Log; +import android.view.View; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.lambdaschool.congressdataapiaccess.CongresspersonOverview; + + +import android.arch.lifecycle.ViewModelProviders; + +import java.util.ArrayList; +import java.util.Collections; public class ListActivity extends AppCompatActivity { + LinearLayout parentLayout; + CPOverviewViewModel viewModel; + Context context; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_list); + + parentLayout = findViewById(R.id.parent_layout); + context = this; + + viewModel = ViewModelProviders.of(this).get(CPOverviewViewModel.class); + + viewModel.getOverViewList().observe(this, new Observer>() { + @Override + public void onChanged(@Nullable ArrayList cpOverviews) { + if (cpOverviews != null) { + Collections.sort(cpOverviews, + (o1, o2) -> o1.getState().compareTo(o2.getState())); + for (CongresspersonOverview person : cpOverviews) { + parentLayout.addView(getDefaultTextView(person)); + } + } + } + }); + + } + + TextView getDefaultTextView(final CongresspersonOverview person) { + TextView view = new TextView(context); + String displayText = String.format("%s %s (%s)", person.getFirstName(), person.getLastName(), person.getState()); + view.setText(displayText); + view.setTextSize(28); + view.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + String id = person.getId(); + Log.i("CPID", id); + + Intent intent = new Intent(context, DetailsView.class); + intent.putExtra("CPID",id); + startActivity(intent); + } + }); + return view; } + + + + } diff --git a/app/src/main/res/layout/activity_details_view.xml b/app/src/main/res/layout/activity_details_view.xml new file mode 100644 index 0000000..6234f57 --- /dev/null +++ b/app/src/main/res/layout/activity_details_view.xml @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + + + \ 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..f5a83b6 100644 --- a/app/src/main/res/layout/activity_list.xml +++ b/app/src/main/res/layout/activity_list.xml @@ -6,13 +6,16 @@ android:layout_height="match_parent" tools:context=".ListActivity"> - + + + + + \ No newline at end of file diff --git a/build.gradle b/build.gradle index 077cb2f..8d3ef8e 100644 --- a/build.gradle +++ b/build.gradle @@ -7,7 +7,7 @@ buildscript { jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:3.1.4' + classpath 'com.android.tools.build:gradle:3.2.1' // NOTE: Do not place your application dependencies here; they belong diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 95d3e5f..441e1cd 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Tue Sep 04 14:01:16 MDT 2018 +#Thu Nov 08 13:06:56 PST 2018 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip