Skip to content

Commit 39014df

Browse files
author
Andrew Sosa
committed
Implemented Caching, minor style updates
1 parent 518bc28 commit 39014df

21 files changed

Lines changed: 747 additions & 698 deletions

.idea/vcs.xml renamed to .idea/encodings.xml

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/gradle.xml

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/workspace.xml

Lines changed: 516 additions & 478 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

mobile/mobile.iml

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -65,12 +65,11 @@
6565
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/jni" isTestSource="true" />
6666
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" />
6767
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/assets" />
68-
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/bundles" />
68+
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/blame" />
6969
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/classes" />
70-
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/coverage-instrumented-classes" />
70+
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/debug" />
7171
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/dependency-cache" />
7272
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/dex" />
73-
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/dex-cache" />
7473
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/appcompat-v7/23.1.1/jars" />
7574
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/cardview-v7/23.1.1/jars" />
7675
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/design/23.1.1/jars" />
@@ -79,17 +78,14 @@
7978
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/support-v4/23.1.1/jars" />
8079
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.yqritc/recyclerview-flexibledivider/1.2.6/jars" />
8180
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental" />
82-
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/jacoco" />
83-
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/javaResources" />
84-
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/libs" />
85-
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/lint" />
8681
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/manifests" />
87-
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/ndk" />
82+
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/multi-dex" />
8883
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/pre-dexed" />
89-
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/proguard" />
9084
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/res" />
9185
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/rs" />
9286
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/symbols" />
87+
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/tmp" />
88+
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/transforms" />
9389
<excludeFolder url="file://$MODULE_DIR$/build/outputs" />
9490
<excludeFolder url="file://$MODULE_DIR$/build/tmp" />
9591
</content>

mobile/src/main/assets/unisans.OTF

111 KB
Binary file not shown.

mobile/src/main/java/com/hackfsu/hackfsu_android/FeedFragment.java

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.hackfsu.hackfsu_android;
22

33
import android.content.Context;
4+
import android.graphics.Typeface;
45
import android.os.Bundle;
56
import android.support.design.widget.AppBarLayout;
67
import android.support.design.widget.CollapsingToolbarLayout;
@@ -80,19 +81,23 @@ public void onActivityCreated(Bundle savedInstanceState) {
8081
mViewPager.setAdapter(mPagerAdapter);
8182
mTabLayout.setupWithViewPager(mViewPager);
8283

83-
AppBarLayout.OnOffsetChangedListener barListener = new AppBarLayout.OnOffsetChangedListener() {
84-
@Override
85-
public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) {
86-
if(mCollasping.getHeight() + verticalOffset < 2 * ViewCompat.getMinimumHeight(mCollasping)) {
87-
//hello.animate().alpha(1).setDuration(600);
88-
} else {
89-
//hello.animate().alpha(0).setDuration(600);
90-
}
91-
}
92-
};
84+
if(savedInstanceState != null) {
85+
mViewPager.setCurrentItem(savedInstanceState.getInt("pos"));
86+
}
87+
9388

94-
mAppBar.addOnOffsetChangedListener(barListener);
89+
// Custom toolbar font
90+
Typeface face;
91+
face = Typeface.createFromAsset(getContext().getAssets(), "unisans.OTF");
92+
mCollasping.setCollapsedTitleTypeface(face);
93+
mCollasping.setExpandedTitleTypeface(face);
94+
mCollasping.setTitle("HACKFSU");
95+
}
9596

97+
@Override
98+
public void onSaveInstanceState(Bundle outState) {
99+
super.onSaveInstanceState(outState);
100+
outState.putInt("pos", mViewPager.getCurrentItem());
96101
}
97102

98103
@Override

mobile/src/main/java/com/hackfsu/hackfsu_android/HackFSU.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,9 @@ public class HackFSU extends Application {
1414
public void onCreate() {
1515
super.onCreate();
1616
ParseObject.registerSubclass(ScheduleFragment.ScheduleItem.class);
17+
ParseObject.registerSubclass(ScheduleFragment.ScheduleDivider.class);
1718
ParseObject.registerSubclass(UpdateFragment.UpdateItem.class);
19+
//Parse.enableLocalDatastore(this);
1820
Parse.initialize(this, "7MgItVIkvSmADkIdIVPmEbIOOZQ84ilW224wXsgS", "hHoLbbe3SWIzt6JiXaNY5gdPQ47QBGH6AlbHHTih");
1921
ParseInstallation.getCurrentInstallation().saveInBackground();
2022
ParsePush.subscribeInBackground("announcements");

mobile/src/main/java/com/hackfsu/hackfsu_android/MainActivity.java

Lines changed: 87 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -18,62 +18,38 @@ public class MainActivity extends AppCompatActivity
1818
BaseFragment.OnFragmentInteractionListener {
1919

2020
DrawerLayout drawer;
21+
NavigationView navigationView;
22+
23+
String activeFragmentTag;
24+
int activeFragmentId;
2125

2226
@Override
2327
protected void onCreate(Bundle savedInstanceState) {
2428
super.onCreate(savedInstanceState);
2529
setContentView(R.layout.activity_main);
2630

2731
drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
32+
navigationView = (NavigationView) findViewById(R.id.nav_view);
2833

29-
/*// Toolbar stuff
30-
mToolbar = (Toolbar) findViewById(R.id.toolbar);
31-
//toolbar.inflateMenu(R.menu.menu_main);
32-
//setSupportActionBar(mToolbar);
33-
//mToolbar.setTitle("HackFSU");
34-
mToolbar.setNavigationIcon(R.drawable.ic_menu_white_24dp);
35-
mToolbar.setNavigationOnClickListener(new View.OnClickListener() {
36-
@Override
37-
public void onClick(View v) {
38-
if (!drawer.isDrawerOpen(GravityCompat.START)) {
39-
drawer.openDrawer(GravityCompat.START);
40-
}
41-
}
42-
});
43-
mToolbar.setOnMenuItemClickListener(this);
44-
mToolbar.inflateMenu(R.menu.menu_main);*/
45-
46-
NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
34+
// Restore or Init state
4735
navigationView.setNavigationItemSelectedListener(this);
48-
navigationView.setCheckedItem(R.id.nav_live);
49-
50-
51-
52-
// Tab Layout setup
53-
/*mTabLayout = (TabLayout) findViewById(R.id.tabs);
54-
55-
56-
// View Pager setup
57-
ArrayList<Fragment> fragments = new ArrayList<>();
58-
fragments.add(UpdateFragment.newInstance());
59-
fragments.add(UpdateFragment.newInstance());
60-
fragments.add(UpdateFragment.newInstance());
61-
fragments.add(UpdateFragment.newInstance());
62-
PagerAdapter mPagerAdapter = new PagerAdapter(super.getSupportFragmentManager(), fragments);
63-
mViewPager = (ViewPager) findViewById(R.id.viewpager);
64-
mViewPager.setAdapter(mPagerAdapter);
65-
mTabLayout.setupWithViewPager(mViewPager);*/
66-
67-
FragmentManager fm = getSupportFragmentManager();
68-
FeedFragment ff = FeedFragment.newInstance();
69-
fm.beginTransaction().replace(R.id.fragment_anchor, ff).commit();
70-
71-
72-
73-
74-
36+
if(savedInstanceState != null) {
37+
restoreFragmentTransaction(savedInstanceState);
38+
} else {
39+
newFragmentTransaction(R.id.nav_live);
40+
}
41+
}
7542

43+
@Override
44+
protected void onSaveInstanceState(Bundle outState) {
45+
super.onSaveInstanceState(outState);
7646

47+
//Save the fragment's instance
48+
/*FragmentManager fm = getSupportFragmentManager();
49+
Fragment fg = fm.findFragmentByTag(activeFragmentTag);
50+
fm.putFragment(outState, "fragment", fg);
51+
outState.putString("tag", activeFragmentTag); */
52+
outState.putInt("id", activeFragmentId);
7753

7854
}
7955

@@ -126,26 +102,12 @@ public boolean onNavigationItemSelected(MenuItem item) {
126102
// Handle navigation view item clicks here.
127103
int id = item.getItemId();
128104

129-
if(item.getGroupId() == R.id.primary) {
130105

131-
FragmentManager fm = getSupportFragmentManager();
132-
Fragment fg;
133-
134-
switch (id) {
135-
case R.id.nav_live:
136-
fg = FeedFragment.newInstance(); break;
137-
case R.id.nav_map:
138-
fg = MapsFragment.newInstance(); break;
139-
default: return true;
140-
}
141-
142-
updateUI(id);
106+
if(item.getGroupId() == R.id.primary && shouldChangeFragments(id)) {
143107

144-
fm.beginTransaction().replace(R.id.fragment_anchor, fg).commit();
108+
newFragmentTransaction(id);
145109

146-
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
147-
drawer.closeDrawer(GravityCompat.START);
148-
} else {
110+
} else if (item.getGroupId() == R.id.secondary) {
149111
switch (id) {
150112
case R.id.nav_help:
151113
startActivity(new Intent(this, HelpActivity.class));
@@ -155,7 +117,7 @@ public boolean onNavigationItemSelected(MenuItem item) {
155117
}
156118
}
157119

158-
120+
drawer.closeDrawer(GravityCompat.START);
159121
return true;
160122
}
161123

@@ -183,4 +145,66 @@ public void updateUI(int id) {
183145
break;
184146
}
185147
}
148+
149+
public void newFragmentTransaction(int id) {
150+
151+
// Be Prepared~!
152+
FragmentManager fm = getSupportFragmentManager();
153+
Fragment fg = null;
154+
155+
// How can IDs be real if our eyes aren't real?
156+
switch (id) {
157+
case R.id.nav_live:
158+
fg = FeedFragment.newInstance(); break;
159+
case R.id.nav_map:
160+
fg = MapsFragment.newInstance(); break;
161+
}
162+
163+
// Actual cannibal shia transaction
164+
if(fg != null) {
165+
updateUI(id);
166+
activeFragmentTag = getFragmentTag(id);
167+
activeFragmentId = id;
168+
navigationView.setCheckedItem(R.id.nav_live);
169+
fm.beginTransaction().replace(R.id.fragment_anchor, fg, activeFragmentTag).commit();
170+
}
171+
}
172+
173+
public void restoreFragmentTransaction(Bundle savedInstanceState) {
174+
175+
activeFragmentId = savedInstanceState.getInt("id");
176+
newFragmentTransaction(activeFragmentId);
177+
178+
/* Fuck all of this
179+
// Prepare Fragment
180+
FragmentManager fm = getSupportFragmentManager();
181+
Fragment fg = fm.getFragment(savedInstanceState, "fragment");
182+
183+
// Handle the metadata updates
184+
activeFragmentId = savedInstanceState.getInt("id");
185+
activeFragmentTag = getFragmentTag(activeFragmentId);
186+
navigationView.setCheckedItem(activeFragmentId);
187+
updateUI(activeFragmentId);
188+
189+
// Just do it!!
190+
fm.beginTransaction().replace(R.id.fragment_anchor, fg, activeFragmentTag).commit();
191+
*/
192+
}
193+
194+
public String getFragmentTag(int id) {
195+
196+
switch (id) {
197+
case R.id.nav_live: return "Live";
198+
case R.id.nav_map: return "Map";
199+
case R.id.nav_sponsors: return "Sponsors";
200+
default: return "";
201+
}
202+
}
203+
204+
public boolean shouldChangeFragments(int id) {
205+
206+
FragmentManager fm = getSupportFragmentManager();
207+
return (fm.findFragmentByTag(getFragmentTag(id)) == null);
208+
209+
}
186210
}

mobile/src/main/java/com/hackfsu/hackfsu_android/ScheduleFragment.java

Lines changed: 30 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ public void onActivityCreated(Bundle savedInstanceState) {
5959

6060
// use this setting to improve performance if you know that changes
6161
// in content do not change the layout size of the RecyclerView
62-
mRecyclerView.setHasFixedSize(true);
62+
mRecyclerView.setHasFixedSize(false);
6363

6464
// use a linear layout manager
6565
mLayoutManager = new LinearLayoutManager(getActivity());
@@ -71,6 +71,7 @@ public void onActivityCreated(Bundle savedInstanceState) {
7171
mRecyclerView.setAdapter(mAdapter);
7272

7373
ParseQuery<ScheduleItem> query = ParseQuery.getQuery("ScheduleItem");
74+
query.setCachePolicy(ParseQuery.CachePolicy.CACHE_THEN_NETWORK);
7475
query.orderByAscending("startTime");
7576
query.findInBackground(new FindCallback<ScheduleItem>() {
7677
@Override
@@ -79,7 +80,7 @@ public void done(List<ScheduleItem> list, ParseException e) {
7980
Log.e("HackFSU", "Error: " + e.getMessage());
8081
} else {
8182
mAdapter.replaceDataset(list);
82-
mAdapter.notifyItemRangeInserted(0, list.size());
83+
mAdapter.notifyItemRangeChanged(0, mAdapter.getItemCount());
8384
}
8485
}
8586
});
@@ -130,13 +131,23 @@ public void onBindViewHolder(ViewHolder holder, int position) {
130131
// - get element from your dataset at this position
131132
// - replace the contents of the view with that element
132133

133-
SimpleDateFormat formatter = new SimpleDateFormat("hh:mm a", Locale.US);
134-
formatter.setTimeZone(TimeZone.getTimeZone("UTC"));
135-
String startTime = formatter.format(mDataset.get(position).getStartTime());
134+
if(mDataset.get(position) instanceof ScheduleDivider) {
135+
136+
holder.mTimeText.setText("Upcoming");
137+
holder.mTitleText.setText("");
138+
holder.mSubtitleText.setText("");
139+
140+
} else {
141+
SimpleDateFormat formatter = new SimpleDateFormat("hh:mm a", Locale.US);
142+
formatter.setTimeZone(TimeZone.getTimeZone("UTC"));
143+
String startTime = formatter.format(mDataset.get(position).getStartTime());
144+
145+
holder.mTimeText.setText(startTime);
146+
holder.mTitleText.setText(mDataset.get(position).getTitle());
147+
holder.mSubtitleText.setText(mDataset.get(position).getSubtitle());
148+
}
149+
136150

137-
holder.mTimeText.setText(startTime);
138-
holder.mTitleText.setText(mDataset.get(position).getTitle());
139-
holder.mSubtitleText.setText(mDataset.get(position).getSubtitle());
140151

141152
}
142153

@@ -148,6 +159,12 @@ public int getItemCount() {
148159

149160
public void replaceDataset(List<ScheduleItem> data) {
150161
mDataset = data;
162+
/*GregorianCalendar gc = new GregorianCalendar(Locale.US);
163+
for(ScheduleItem u : mDataset) {
164+
if(u.getStartTime().compareTo(gc.getTime()) < 0) {
165+
mDataset.add(mDataset.indexOf(u), new ScheduleDivider());
166+
}
167+
}*/
151168
}
152169
}
153170

@@ -174,4 +191,9 @@ public String getTitle() {
174191
return getString("title");
175192
}
176193
}
194+
195+
@ParseClassName("ScheduleDivider")
196+
public static class ScheduleDivider extends ScheduleItem {
197+
198+
}
177199
}

0 commit comments

Comments
 (0)