Start building new form for tasks

This commit is contained in:
Phillip Thelen 2015-07-27 16:48:18 +02:00
parent c36339249c
commit 73f8c596d3
9 changed files with 388 additions and 28 deletions

View file

@ -2,7 +2,7 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.habitrpg.android.habitica"
android:versionCode="1"
android:versionName="0.0.1">
android:versionName="0.0.1" >
<uses-sdk
android:minSdkVersion="13"
@ -23,11 +23,11 @@
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme">
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:windowSoftInputMode="stateHidden|adjustResize">
android:windowSoftInputMode="stateHidden|adjustResize" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
@ -37,7 +37,7 @@
<activity
android:name=".prefs.PrefsActivity"
android:label="@string/PS_param_title"
android:theme="@style/AppThemeWithActionBar">
android:theme="@style/AppThemeWithActionBar" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
</intent-filter>
@ -45,8 +45,8 @@
<activity
android:name=".LoginActivity"
android:label="@string/LoginActivityName"
android:windowSoftInputMode="adjustResize"
android:theme="@style/AppThemeWithActionBar">
android:theme="@style/AppThemeWithActionBar"
android:windowSoftInputMode="adjustResize" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
</intent-filter>
@ -55,7 +55,7 @@
<receiver
android:name=".widget.SimpleWidget"
android:icon="@mipmap/ic_launcher"
android:label="Habitica Simple Widget">
android:label="Habitica Simple Widget" >
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
@ -71,8 +71,18 @@
android:name="io.fabric.ApiKey"
android:value="2eb3b3edb3b0f4722d37d649a5af366656e46ddd" />
<activity android:name=".AboutActivity"
android:theme="@style/AppThemeWithActionBar"/>
<activity
android:name=".AboutActivity"
android:theme="@style/AppThemeWithActionBar" />
<activity
android:name=".TaskFormActivity"
android:label="@string/title_activity_task_form"
android:theme="@style/AppThemeWithActionBar"
android:parentActivityName=".MainActivity" >
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.habitrpg.android.habitica.MainActivity" />
</activity>
</application>
</manifest>

View file

@ -0,0 +1,186 @@
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/scrollView">
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/task_main_wrapper"
android:padding="@dimen/abc_action_bar_content_inset_material">
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/task_task_wrapper"
android:layout_marginTop="@dimen/abc_action_bar_content_inset_material"
android:layout_marginBottom="@dimen/abc_action_bar_content_inset_material">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="@string/task"
android:id="@+id/task_text_textview" />
<android.support.design.widget.TextInputLayout
android:layout_width="match_parent"
android:layout_height="72dp"
app:hintTextAppearance="@style/TextAppearance.AppCompat">
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/task_text_edittext"
android:layout_gravity="center_horizontal"
android:hint="@string/text"
android:textColor="@color/text_light" />
</android.support.design.widget.TextInputLayout>
<android.support.design.widget.TextInputLayout
android:layout_width="match_parent"
android:layout_height="72dp"
app:hintTextAppearance="@style/TextAppearance.AppCompat">
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/task_notes_edittext"
android:layout_gravity="center_horizontal"
android:hint="@string/notes"
android:textColor="@color/text_light" />
</android.support.design.widget.TextInputLayout>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="72dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="@string/difficulty"
android:id="@+id/textView2"
android:layout_gravity="center_vertical" />
<Spinner
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:id="@+id/task_difficulty_spinner"
android:layout_gravity="center_horizontal|right" />
</LinearLayout>
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="72dp"
android:layout_gravity="center_horizontal"
android:id="@+id/task_startdate_layout">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="@string/start_date"
android:id="@+id/textView"
android:layout_gravity="center_vertical" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/task_startdate_textview"
android:textAlignment="gravity"
android:layout_gravity="center_vertical|right" />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:id="@+id/task_actions_wrapper"
android:layout_marginTop="@dimen/abc_action_bar_content_inset_material">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="@string/actions"
android:id="@+id/textView5" />
<RelativeLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="72dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="@string/positive_habit_form"
android:id="@+id/textView7"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true"
android:layout_marginTop="11dp" />
<CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/task_positive_checkbox"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_marginTop="0dp" />
</RelativeLayout>
<RelativeLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="72dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="@string/negative_habit_form"
android:id="@+id/textView8"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true"
android:layout_marginTop="11dp" />
<CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/task_negative_checkbox"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_marginTop="0dp" />
</RelativeLayout>
</LinearLayout>
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:id="@+id/task_checklist_wrapper"
android:layout_marginTop="@dimen/abc_action_bar_content_inset_material" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="@string/checklist"
android:id="@+id/textView9" />
</LinearLayout>
</LinearLayout>
</ScrollView>

View file

@ -0,0 +1,7 @@
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context="com.habitrpg.android.habitica.TaskFormActivity">
<item android:id="@+id/action_settings" android:title="@string/action_settings"
android:orderInCategory="100" app:showAsAction="never" />
</menu>

View file

@ -118,4 +118,17 @@
<string name="checklist.title.add">Add checklist</string>
<string name="checklist.title.edit">Edit checklist</string>
<string name="checklist.item.hint">Add item…</string>
<string name="title_activity_task_form">Add Task</string>
<string name="discard_changed">Discard Changes</string>
<string name="notes">Notes</string>
<string name="text">Text</string>
<string name="difficulty">Difficulty</string>
<string name="start_date">Start Date</string>
<string name="positive_habit_form">Positive ( + )</string>
<string name="negative_habit_form">Negative ( - )</string>
<string name="checklist">Checklist</string>
<string name="actions">Actions</string>
<string name="task">Task</string>
</resources>

View file

@ -5,7 +5,7 @@
<!-- Application theme. -->
<style name="AppTheme" parent="@style/MaterialDrawerTheme.Light.DarkToolbar.TranslucentStatus">
<item name="android:listSeparatorTextViewStyle">@style/MyOwnListSeperatorTextViewStyle</item>
<item name="android:textColorPrimary">@android:color/white</item>
<item name="android:textColorPrimary">@android:color/black</item>
<item name="android:windowContentOverlay">@null</item>
@ -18,7 +18,7 @@
<!-- ...and here we setting appcompats color theming attrs -->
<item name="colorPrimary">@color/brand</item>
<item name="colorPrimaryDark">@color/brand</item>
<item name="colorAccent">@color/md_teal_300</item>
<item name="colorAccent">@color/brand</item>
<!-- MaterialDrawer specific values -->
<item name="material_drawer_background">@color/material_drawer_background</item>
@ -42,8 +42,6 @@
<item name="android:windowDrawsSystemBarBackgrounds" tools:targetApi="21">false</item>
<item name="android:windowTranslucentStatus" tools:targetApi="21">false</item>
<item name="android:textColorPrimary">@android:color/black</item>
</style>
<style name="PopupTheme" parent="Widget.AppCompat.PopupMenu.Overflow">
@ -98,4 +96,5 @@
<item name="spinBars">true</item>
<item name="color">@color/drawerArrowColor</item>
</style>
</resources>

View file

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="task_difficulties">
<item>Trivial</item>
<item>Easy</item>
<item>Medium</item>
<item>Hard</item>
</string-array>
</resources>

View file

@ -2,13 +2,9 @@
<resources>
<string-array name="prefs_items_array">
<item>HabitRPG</item>
<item>HabitRPG Beta</item>
<item>Custom</item>
</string-array>
<string-array name="prefs_items_values">
<item>https://habitrpg.com/</item>
<item>https://beta.habitrpg.com/</item>
<item>OMGOMGOMGOMGOMG</item>
</string-array>
</resources>

View file

@ -283,13 +283,13 @@ public class MainActivity extends InstabugAppCompatActivity implements HabitRPGU
if(event.Task instanceof RewardItem)
return;
Bundle b = new Bundle();
b.putString("type", event.Task.getType().toString());
b.putString("taskId", event.Task.getId());
Bundle bundle = new Bundle();
bundle.putString("type", event.Task.getType().toString());
bundle.putString("taskId", event.Task.getId());
AddTaskDialog dialog = new AddTaskDialog();
dialog.setArguments(b);
dialog.show(getSupportFragmentManager(), "AddTaskDialog");
Intent intent = new Intent(this, TaskFormActivity.class);
intent.putExtras(bundle);
startActivity(intent);
}
public void onEvent(TaskLongPressedEvent event) {
@ -305,12 +305,12 @@ public class MainActivity extends InstabugAppCompatActivity implements HabitRPGU
}
public void onEvent(AddTaskTappedEvent event) {
Bundle b = new Bundle();
b.putString("type", event.ClassType.getSimpleName().toLowerCase());
Bundle bundle = new Bundle();
bundle.putString("type", event.ClassType.getSimpleName().toLowerCase());
AddTaskDialog dialog = new AddTaskDialog();
dialog.setArguments(b);
dialog.show(getSupportFragmentManager(), "AddTaskDialog");
Intent intent = new Intent(this, TaskFormActivity.class);
intent.putExtras(bundle);
startActivity(intent);
}
public void onEvent(final BuyRewardTappedEvent event) {

View file

@ -0,0 +1,140 @@
package com.habitrpg.android.habitica;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ArrayAdapter;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.Spinner;
import com.habitrpg.android.habitica.R;
import com.magicmicky.habitrpgwrapper.lib.models.tasks.Daily;
import com.magicmicky.habitrpgwrapper.lib.models.tasks.Habit;
import com.magicmicky.habitrpgwrapper.lib.models.tasks.HabitItem;
import com.magicmicky.habitrpgwrapper.lib.models.tasks.HabitType;
import com.magicmicky.habitrpgwrapper.lib.models.tasks.Reward;
import com.magicmicky.habitrpgwrapper.lib.models.tasks.ToDo;
import com.raizlabs.android.dbflow.sql.language.Select;
import static com.magicmicky.habitrpgwrapper.lib.models.tasks.HabitType.daily;
import static com.magicmicky.habitrpgwrapper.lib.models.tasks.HabitType.habit;
import static com.magicmicky.habitrpgwrapper.lib.models.tasks.HabitType.reward;
import static com.magicmicky.habitrpgwrapper.lib.models.tasks.HabitType.todo;
public class TaskFormActivity extends AppCompatActivity {
private HabitType taskType;
private String taskId;
private EditText taskText, taskNotes;
private Spinner taskDifficulty;
private CheckBox positiveCheckBox, negativeCheckBox;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_task_form);
Intent intent = getIntent();
Bundle bundle = intent.getExtras();
String type = bundle.getString("type");
taskId = bundle.getString("taskId");
if (type == null) {
return;
}
taskType = type.equals(daily.toString()) ? daily
: type.equals(reward.toString()) ? reward
: type.equals(todo.toString()) ? todo
: habit;
LinearLayout mainWrapper = (LinearLayout) findViewById(R.id.task_main_wrapper);
taskText = (EditText) findViewById(R.id.task_text_edittext);
taskNotes = (EditText) findViewById(R.id.task_notes_edittext);
taskDifficulty = (Spinner) findViewById(R.id.task_difficulty_spinner);
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,
R.array.task_difficulties, android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
taskDifficulty.setAdapter(adapter);
if (taskType == habit) {
LinearLayout startDateLayout = (LinearLayout) findViewById(R.id.task_startdate_layout);
LinearLayout taskWrapper = (LinearLayout) findViewById(R.id.task_task_wrapper);
taskWrapper.removeView(startDateLayout);
LinearLayout checklistLayout = (LinearLayout) findViewById(R.id.task_checklist_wrapper);
mainWrapper.removeView(checklistLayout);
positiveCheckBox = (CheckBox) findViewById(R.id.task_positive_checkbox);
negativeCheckBox = (CheckBox) findViewById(R.id.task_negative_checkbox);
}
if (taskType != habit) {
LinearLayout actionsLayout = (LinearLayout) findViewById(R.id.task_actions_wrapper);
mainWrapper.removeView(actionsLayout);
}
if (taskId != null) {
switch (taskType) {
case todo:
ToDo todo = new Select().from(ToDo.class).byIds(taskId).querySingle();
this.populate(todo);
break;
case daily:
Daily daily = new Select().from(Daily.class).byIds(taskId).querySingle();
this.populate(daily);
break;
case habit:
Habit habit = new Select().from(Habit.class).byIds(taskId).querySingle();
this.populate(habit);
break;
}
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_task_form, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
private void populate(HabitItem task) {
taskText.setText(task.text);
taskNotes.setText(task.notes);
}
private void populate(Habit task) {
populate((HabitItem) task);
positiveCheckBox.setChecked(task.getUp());
negativeCheckBox.setChecked(task.getDown());
}
private void populate(Daily task) {
populate((HabitItem) task);
}
private void populate(ToDo task) {
populate((HabitItem) task);
}
}