Skip to content

Commit e0cfddf

Browse files
committed
feat: task view, long click tasks
1 parent ebd19ce commit e0cfddf

File tree

10 files changed

+287
-116
lines changed

10 files changed

+287
-116
lines changed

app/build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ dependencies {
7979
compile 'com.android.support:support-v4:26.0.1'
8080
compile 'com.android.support:support-vector-drawable:26.0.1'
8181
compile 'com.android.support:preference-v7:26.0.1'
82+
compile 'com.wdullaer:materialdatetimepicker:3.2.2'
8283
testCompile 'junit:junit:4.12'
8384
}
8485

app/src/main/AndroidManifest.xml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,9 @@
2222
android:name="io.fabric.ApiKey"
2323
android:value="d70cc0c0eef2fdf1a924fd75b1e4114aa5747d69" />
2424

25-
<activity android:name=".MainActivity"></activity>
25+
<activity android:name=".MainActivity" />
26+
<activity android:name=".TaskViewActivity"
27+
android:parentActivityName=".MainActivity" />
2628
<activity
2729
android:name=".WelcomeActivity"
2830
android:theme="@style/AppTheme.NoActionBar">

app/src/main/java/tech/akpmakes/android/taskkeeper/AddItemDialog.java

Lines changed: 0 additions & 77 deletions
This file was deleted.

app/src/main/java/tech/akpmakes/android/taskkeeper/MainActivity.java

Lines changed: 50 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
package tech.akpmakes.android.taskkeeper;
22

3+
import android.app.Activity;
34
import android.content.Intent;
45
import android.os.Bundle;
56
import android.support.annotation.NonNull;
67
import android.support.design.widget.Snackbar;
7-
import android.support.v4.app.DialogFragment;
88
import android.support.v7.app.AppCompatActivity;
99
import android.support.v7.widget.DividerItemDecoration;
1010
import android.support.v7.widget.LinearLayoutManager;
@@ -14,6 +14,8 @@
1414
import android.view.Menu;
1515
import android.view.MenuInflater;
1616
import android.view.MenuItem;
17+
import android.view.View;
18+
import android.view.ViewGroup;
1719

1820
import com.crashlytics.android.Crashlytics;
1921
import com.firebase.ui.database.FirebaseRecyclerAdapter;
@@ -27,13 +29,12 @@
2729
import com.google.firebase.remoteconfig.FirebaseRemoteConfig;
2830
import com.google.firebase.remoteconfig.FirebaseRemoteConfigSettings;
2931

30-
import java.util.Date;
31-
3232
import io.fabric.sdk.android.Fabric;
3333
import tech.akpmakes.android.taskkeeper.models.WhenEvent;
3434

35-
public class MainActivity extends AppCompatActivity implements AddItemDialog.AddItemDialogListener, FirebaseAuth.AuthStateListener {
35+
public class MainActivity extends AppCompatActivity implements FirebaseAuth.AuthStateListener {
3636
private static final String TAG = "MainActivity";
37+
private static final int WHEN_EVENT_REQUEST = 6900;
3738
private FirebaseAuth mAuth;
3839
private FirebaseRemoteConfig mRemoteConfig;
3940
private Query mDBQuery;
@@ -140,6 +141,7 @@ private void updateUI(FirebaseUser user) {
140141
return; // TODO: display an error
141142
}
142143

144+
final Activity activity = this;
143145
mDBQuery = FirebaseDatabase.getInstance().getReference("events/" + user.getUid()).orderByChild("when");
144146
mAdapter = new FirebaseRecyclerAdapter<WhenEvent, WhenEventViewHolder>(
145147
WhenEvent.class,
@@ -151,6 +153,25 @@ public void populateViewHolder(WhenEventViewHolder holder, WhenEvent evt, int po
151153
holder.setName(evt.getName());
152154
holder.setWhen(evt.getWhen());
153155
}
156+
@Override
157+
public WhenEventViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
158+
WhenEventViewHolder viewHolder = super.onCreateViewHolder(parent, viewType);
159+
viewHolder.setOnClickListener(new WhenEventViewHolder.ClickListener() {
160+
@Override
161+
public void onItemClick(View view, int position) {}
162+
163+
@Override
164+
public void onItemLongClick(View view, int position) {
165+
Intent i = new Intent(activity, TaskViewActivity.class);
166+
WhenEvent evt = (WhenEvent) mAdapter.getItem(position);
167+
i.putExtra("whenName", evt.getName());
168+
i.putExtra("whenTime", evt.getWhen());
169+
i.putExtra("whenKey", mAdapter.getRef(position).getKey());
170+
startActivityForResult(i, WHEN_EVENT_REQUEST);
171+
}
172+
});
173+
return viewHolder;
174+
}
154175
};
155176
mRecyclerView.setAdapter(mAdapter);
156177
}
@@ -167,28 +188,38 @@ public boolean onOptionsItemSelected(MenuItem item) {
167188
switch (item.getItemId()) {
168189
case R.id.settings:
169190
startActivity(new Intent(this, SettingsActivity.class));
170-
return true;
191+
return super.onOptionsItemSelected(item);
171192
case R.id.add_item:
172-
addItem();
193+
startActivityForResult(new Intent(this, TaskViewActivity.class), WHEN_EVENT_REQUEST);
194+
return super.onOptionsItemSelected(item);
173195
default:
174196
return super.onOptionsItemSelected(item);
175197
}
176198
}
177199

178-
private void addItem() {
179-
DialogFragment addItemFragment = new AddItemDialog();
180-
addItemFragment.show(getSupportFragmentManager(), "addItem");
181-
}
182-
183200
@Override
184-
public void onValue(String name) {
185-
if(mDBQuery != null) {
186-
mDBQuery.getRef().push().setValue(new WhenEvent(name, new Date().getTime()));
187-
Snackbar.make(findViewById(android.R.id.content), "Event saved successfully!",
188-
Snackbar.LENGTH_LONG).show();
189-
} else {
190-
Snackbar.make(findViewById(android.R.id.content), "Your event could not be saved. Please try again.",
191-
Snackbar.LENGTH_LONG).show();
201+
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
202+
if (requestCode == WHEN_EVENT_REQUEST) {
203+
if (resultCode == RESULT_OK) {
204+
WhenEvent evt = new WhenEvent(
205+
data.getStringExtra("whenName"),
206+
data.getLongExtra("whenTime", 0)
207+
);
208+
209+
if (mDBQuery != null) {
210+
if(data.hasExtra("whenKey")) {
211+
mDBQuery.getRef().child(data.getStringExtra("whenKey")).setValue(evt);
212+
} else {
213+
mDBQuery.getRef().push().setValue(evt);
214+
}
215+
216+
Snackbar.make(findViewById(android.R.id.content), "Event saved successfully!",
217+
Snackbar.LENGTH_LONG).show();
218+
} else {
219+
Snackbar.make(findViewById(android.R.id.content), "Your event could not be saved. Please try again.",
220+
Snackbar.LENGTH_LONG).show();
221+
}
222+
}
192223
}
193224
}
194225

Lines changed: 130 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,130 @@
1+
package tech.akpmakes.android.taskkeeper;
2+
3+
import android.app.Activity;
4+
import android.content.Intent;
5+
import android.os.Bundle;
6+
import android.support.v7.app.AppCompatActivity;
7+
import android.view.View;
8+
import android.widget.Button;
9+
import android.widget.EditText;
10+
import android.widget.TextView;
11+
12+
import com.wdullaer.materialdatetimepicker.date.DatePickerDialog;
13+
import com.wdullaer.materialdatetimepicker.time.TimePickerDialog;
14+
15+
import java.text.DateFormat;
16+
import java.text.SimpleDateFormat;
17+
import java.util.Calendar;
18+
19+
import tech.akpmakes.android.taskkeeper.models.WhenEvent;
20+
21+
public class TaskViewActivity extends AppCompatActivity implements DatePickerDialog.OnDateSetListener, TimePickerDialog.OnTimeSetListener {
22+
Calendar whenTime;
23+
TextView taskDate;
24+
TextView taskTime;
25+
String whenKey;
26+
27+
@Override
28+
protected void onCreate(Bundle savedInstanceState) {
29+
super.onCreate(savedInstanceState);
30+
setContentView(R.layout.activity_task_view);
31+
final EditText taskName = findViewById(R.id.task_name_content);
32+
taskDate = findViewById(R.id.task_when_date);
33+
taskTime = findViewById(R.id.task_when_time);
34+
Button taskSave = findViewById(R.id.btn_save_task);
35+
36+
whenTime = Calendar.getInstance();
37+
38+
Intent i = getIntent();
39+
if (i.hasExtra("whenName")) {
40+
taskName.setText(i.getStringExtra("whenName"));
41+
}
42+
43+
if (i.hasExtra("whenTime")) {
44+
whenTime.setTimeInMillis(i.getLongExtra("whenTime", 0));
45+
}
46+
47+
if (i.hasExtra("whenKey")) {
48+
whenKey = i.getStringExtra("whenKey");
49+
}
50+
51+
updateDateTimeUI();
52+
53+
taskDate.setOnClickListener(new View.OnClickListener() {
54+
@Override
55+
public void onClick(View view) {
56+
Calendar now = Calendar.getInstance();
57+
if(whenTime != null) {
58+
now = whenTime;
59+
}
60+
DatePickerDialog datePicker = DatePickerDialog.newInstance(
61+
TaskViewActivity.this,
62+
now.get(Calendar.YEAR),
63+
now.get(Calendar.MONTH),
64+
now.get(Calendar.DAY_OF_MONTH));
65+
datePicker.show(getFragmentManager(), "DatePickerDialog");
66+
}
67+
});
68+
69+
taskTime.setOnClickListener(new View.OnClickListener() {
70+
@Override
71+
public void onClick(View view) {
72+
Calendar now = Calendar.getInstance();
73+
if(whenTime != null) {
74+
now = whenTime;
75+
}
76+
TimePickerDialog timePicker = TimePickerDialog.newInstance(
77+
TaskViewActivity.this,
78+
now.get(Calendar.HOUR_OF_DAY),
79+
now.get(Calendar.MINUTE),
80+
now.get(Calendar.SECOND),
81+
false
82+
);
83+
timePicker.enableSeconds(true);
84+
timePicker.show(getFragmentManager(), "TimePickerDialog");
85+
}
86+
});
87+
88+
taskSave.setOnClickListener(new View.OnClickListener() {
89+
@Override
90+
public void onClick(View view) {
91+
String name = taskName.getText().toString();
92+
Long when = whenTime.getTimeInMillis();
93+
WhenEvent evt = new WhenEvent(name, when);
94+
Intent i = new Intent();
95+
i.putExtra("whenName", evt.getName());
96+
i.putExtra("whenTime", evt.getWhen());
97+
if(whenKey != null) {
98+
i.putExtra("whenKey", whenKey);
99+
}
100+
setResult(Activity.RESULT_OK, i);
101+
finish();
102+
}
103+
});
104+
}
105+
106+
@Override
107+
public void onDateSet(DatePickerDialog view, int year, int monthOfYear, int dayOfMonth) {
108+
whenTime.set(Calendar.YEAR, year);
109+
whenTime.set(Calendar.MONTH, monthOfYear);
110+
whenTime.set(Calendar.DAY_OF_MONTH, dayOfMonth);
111+
112+
updateDateTimeUI();
113+
}
114+
115+
@Override
116+
public void onTimeSet(TimePickerDialog view, int hourOfDay, int minute, int second) {
117+
whenTime.set(Calendar.HOUR_OF_DAY, hourOfDay);
118+
whenTime.set(Calendar.MINUTE, minute);
119+
whenTime.set(Calendar.SECOND, second);
120+
121+
updateDateTimeUI();
122+
}
123+
124+
private void updateDateTimeUI() {
125+
DateFormat dateFormat = SimpleDateFormat.getDateInstance(SimpleDateFormat.LONG);
126+
DateFormat timeFormat = SimpleDateFormat.getTimeInstance();
127+
taskDate.setText(dateFormat.format(whenTime.getTime()));
128+
taskTime.setText(timeFormat.format(whenTime.getTime()));
129+
}
130+
}

app/src/main/java/tech/akpmakes/android/taskkeeper/WhenEventViewHolder.java

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,19 @@ public void run() {
2525
handler.postDelayed( this, 1000 );
2626
}
2727
}, 1000);
28+
v.setOnClickListener(new View.OnClickListener() {
29+
@Override
30+
public void onClick(View view) {
31+
mClickListener.onItemClick(view, getAdapterPosition());
32+
}
33+
});
34+
v.setOnLongClickListener(new View.OnLongClickListener() {
35+
@Override
36+
public boolean onLongClick(View view) {
37+
mClickListener.onItemLongClick(view, getAdapterPosition());
38+
return false;
39+
}
40+
});
2841
}
2942

3043
private void draw() {
@@ -72,4 +85,13 @@ else if (days == 1) {
7285
}
7386
return extra + res;
7487
}
88+
89+
private WhenEventViewHolder.ClickListener mClickListener;
90+
public interface ClickListener{
91+
void onItemClick(View view, int position);
92+
void onItemLongClick(View view, int position);
93+
}
94+
public void setOnClickListener(WhenEventViewHolder.ClickListener clickListener){
95+
mClickListener = clickListener;
96+
}
7597
}

0 commit comments

Comments
 (0)