activityDataList;
+ ActivityAdapter activityAdapter;
+ RecyclerView recyclerView;
+ DBHelper dbHelper;
+ View dialogView;
+ String colorTheme = MConstants.colors[0];
+ // TODO: Rename parameter arguments, choose names that match
+ // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
+ private static final String ARG_PARAM1 = "param1";
+ private static final String ARG_PARAM2 = "param2";
+
+ // TODO: Rename and change types of parameters
+ private String mParam1;
+ private String mParam2;
+
+ private OnFragmentInteractionListener mListener;
+
+ public HomeFragment() {
+ // Required empty public constructor
+ }
+
+ /**
+ * Use this factory method to create a new instance of
+ * this fragment using the provided parameters.
+ *
+ * @param param1 Parameter 1.
+ * @param param2 Parameter 2.
+ * @return A new instance of fragment HomeFragment.
+ */
+ // TODO: Rename and change types and number of parameters
+ public static HomeFragment newInstance(String param1, String param2) {
+ HomeFragment fragment = new HomeFragment();
+ Bundle args = new Bundle();
+ args.putString(ARG_PARAM1, param1);
+ args.putString(ARG_PARAM2, param2);
+ fragment.setArguments(args);
+ return fragment;
+ }
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ if (getArguments() != null) {
+ mParam1 = getArguments().getString(ARG_PARAM1);
+ mParam2 = getArguments().getString(ARG_PARAM2);
+ }
+ }
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,
+ Bundle savedInstanceState) {
+ // Inflate the layout for this fragment
+ view = inflater.inflate(R.layout.fragment_home, container, false);
+
+ getActivity().setTitle("Home");
+
+ activityDataList = new ArrayList<>();
+ activityAdapter = new ActivityAdapter(activityDataList,HomeFragment.this);
+
+ recyclerView = (RecyclerView)view.findViewById(R.id.recycler_view);
+ RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(view.getContext());
+ recyclerView.setLayoutManager(mLayoutManager);
+ recyclerView.setItemAnimator(new DefaultItemAnimator());
+ recyclerView.setNestedScrollingEnabled(false);
+ dbHelper = new DBHelper(getContext());
+ ItemTouchHelper.Callback itcallback = new ItemTouchHelper.Callback() {//for sorting
+ @Override
+ public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
+
+ return makeFlag(ItemTouchHelper.ACTION_STATE_DRAG,
+ ItemTouchHelper.DOWN | ItemTouchHelper.UP);
+ }
+ @Override
+ public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
+ // get the viewHolder's and target's positions in your adapter data, swap them
+ Collections.swap(activityDataList, viewHolder.getAdapterPosition(), target.getAdapterPosition());
+// activityDataList.get(viewHolder.getAdapterPosition()).setSortOrder(target.getAdapterPosition());
+// activityDataList.get(target.getAdapterPosition()).setSortOrder(viewHolder.getAdapterPosition());
+ //s
+ // and notify the adapter that its dataset has changed
+ activityAdapter.notifyItemMoved(viewHolder.getAdapterPosition(), target.getAdapterPosition());
+ return true;
+ }
+ @Override
+ public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
+ }
+
+ @Override
+ public void onMoved(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, int fromPos, RecyclerView.ViewHolder target, int toPos, int x, int y) {
+ super.onMoved(recyclerView, viewHolder, fromPos, target, toPos, x, y);
+ dbHelper.updateAllSortOrders(activityDataList);
+ }
+ };
+ ItemTouchHelper.Callback itcallbackswipe = new ItemTouchHelper.Callback() {
+ @Override
+ public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
+ return makeFlag(ItemTouchHelper.ACTION_STATE_SWIPE,ItemTouchHelper.LEFT|ItemTouchHelper.RIGHT);
+
+ }
+
+ @Override
+ public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
+ return false;
+ }
+
+ @Override
+ public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
+ displayDeleteDialog(activityDataList.get(viewHolder.getAdapterPosition()));
+ }
+
+ };
+ ItemTouchHelper itemTouchHelperSwipe = new ItemTouchHelper(itcallbackswipe);
+
+ ItemTouchHelper itemTouchHelper = new ItemTouchHelper(itcallback);
+ itemTouchHelper.attachToRecyclerView(recyclerView);
+ itemTouchHelperSwipe.attachToRecyclerView(recyclerView)
+ ;
+ Button addNewButton = (Button)view.findViewById(R.id.addNewButton);
+ addNewButton.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(final View v) {
+ //open a popup for adding new
+ final AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
+ LayoutInflater inflater = LayoutInflater.from(getContext());
+ dialogView = inflater.inflate(R.layout.new_activity_alertbox,null);
+ builder.setView(dialogView);
+
+ changeColorTheme(new Random().nextInt(MConstants.colors.length));//gives random number from 0 to max(excluding)
+
+ final RecyclerView recyclerView = (RecyclerView)dialogView.findViewById(R.id.recycler_view);
+ RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(view.getContext(),LinearLayoutManager.HORIZONTAL,false);
+ recyclerView.setLayoutManager(mLayoutManager);
+ recyclerView.setItemAnimator(new DefaultItemAnimator());
+ recyclerView.setNestedScrollingEnabled(false);
+
+ recyclerView.setAdapter(new ColorThemeAdapter(HomeFragment.this));
+
+ builder.setPositiveButton("Add", new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ String id,name,color;
+ //add to list
+ EditText nameEdiText = (EditText)dialogView.findViewById(R.id.nameEditText);
+
+ id = String.valueOf(System.currentTimeMillis());
+ name = nameEdiText.getText().toString();
+ color = colorTheme;
+ if(!name.equals("")) {
+ ActivityData a = new ActivityData(id, name, color, false,0);
+ activityDataList.add(0,a);
+ //add to database
+ dbHelper.insertActivity(a);
+ //update UI
+ activityAdapter.notifyDataSetChanged();
+ }
+ }
+ });
+ AlertDialog dialog = builder.create();
+ dialog.show();
+ }
+ });
+
+ return view;
+ }
+
+ @Override
+ public void onStart() {
+ super.onStart();
+ //clear-up previous data if any...
+ activityDataList.clear();
+ //add from database here
+ activityDataList.addAll(dbHelper.getAllActivitiesAsList());
+ //sort the list here...
+ activityAdapter.notifyDataSetChanged();
+ recyclerView.setAdapter(activityAdapter);
+ }
+
+ // TODO: Rename method, update argument and hook method into UI event
+ public void onButtonPressed(Uri uri) {
+ if (mListener != null) {
+ mListener.onFragmentInteraction(uri);
+ }
+ }
+
+ @Override
+ public void onAttach(Context context) {
+ super.onAttach(context);
+ if (context instanceof OnFragmentInteractionListener) {
+ mListener = (OnFragmentInteractionListener) context;
+ } else {
+ throw new RuntimeException(context.toString()
+ + " must implement OnFragmentInteractionListener");
+ }
+ }
+
+ @Override
+ public void onDetach() {
+ super.onDetach();
+ mListener = null;
+ }
+
+ /**
+ * This interface must be implemented by activities that contain this
+ * fragment to allow an interaction in this fragment to be communicated
+ * to the activity and potentially other fragments contained in that
+ * activity.
+ *
+ * See the Android Training lesson Communicating with Other Fragments for more information.
+ */
+ public interface OnFragmentInteractionListener {
+ // TODO: Update argument type and name
+ void onFragmentInteraction(Uri uri);
+ }
+
+ @Override
+ public void displayEditDialog(final ActivityData activityData) {
+ //open a popup for adding new
+ final AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
+ LayoutInflater inflater = LayoutInflater.from(getContext());
+ dialogView = inflater.inflate(R.layout.new_activity_alertbox,null);
+ builder.setView(dialogView);
+
+ changeColorTheme(activityData.getColor());
+
+ RecyclerView recyclerView = (RecyclerView)dialogView.findViewById(R.id.recycler_view);
+ RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(view.getContext(),LinearLayoutManager.HORIZONTAL,false);
+ recyclerView.setLayoutManager(mLayoutManager);
+ recyclerView.setItemAnimator(new DefaultItemAnimator());
+ recyclerView.setNestedScrollingEnabled(false);
+
+ recyclerView.setAdapter(new ColorThemeAdapter(HomeFragment.this));
+
+ final EditText nameEdiText = (EditText)dialogView.findViewById(R.id.nameEditText);
+
+ nameEdiText.setText(activityData.getName());
+
+ builder.setPositiveButton("Edit", new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ String name,color;
+
+ name = nameEdiText.getText().toString();
+ color = colorTheme;
+ if(!name.equals("")) {
+ activityData.setName(name);
+ activityData.setColor(color);
+ //add to database
+ dbHelper.updateActivity(activityData);
+ //update UI
+ activityAdapter.notifyDataSetChanged();
+ }
+ }
+ });
+ builder.setNeutralButton("Delete", new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ displayDeleteDialog(activityData);
+ }
+ });
+ builder.setNegativeButton("Cancel",null);
+ AlertDialog dialog = builder.create();
+ dialog.show();
+ }
+
+ @Override
+ public void displayDeleteDialog(final ActivityData activityData) {
+ AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
+ builder.setTitle("Delete '"+activityData.getName()+"' ?");
+ builder.setPositiveButton("Delete", new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ //delete from database
+ new DBHelper(getContext()).deleteActivity(activityData.getId());
+ //delete from list
+ activityDataList.remove(activityData);
+ activityAdapter.notifyDataSetChanged();
+ //also remove from pinned menu if it exists
+ updatePinnedMenu();
+ }
+ });
+ builder.setOnCancelListener(new DialogInterface.OnCancelListener() {
+ @Override
+ public void onCancel(DialogInterface dialog) {
+ activityAdapter.notifyDataSetChanged();
+ }
+ });
+ builder.show();
+ }
+
+ @Override
+ public void changeColorTheme(int pos) {
+ //save to variable
+ colorTheme = MConstants.colors[pos];
+ //change indicator in view
+ dialogView.setBackgroundColor(Color.parseColor(colorTheme));
+
+ }
+
+ private void changeColorTheme(String colorTheme){
+ dialogView.setBackgroundColor(Color.parseColor(colorTheme));
+ }
+
+ public void updatePinnedMenu(){
+ ((MainActivity)getActivity()).menuAddPinned();
+ }
+}
diff --git a/app/src/main/java/com/pkmnapps/activitydo/ImageViewFullscreen.java b/app/src/main/java/com/pkmnapps/activitydo/ImageViewFullscreen.java
new file mode 100644
index 0000000..5dbb503
--- /dev/null
+++ b/app/src/main/java/com/pkmnapps/activitydo/ImageViewFullscreen.java
@@ -0,0 +1,169 @@
+package com.pkmnapps.activitydo;
+
+import android.annotation.SuppressLint;
+import android.net.Uri;
+import android.os.Bundle;
+import android.os.Handler;
+import android.support.v7.app.ActionBar;
+import android.support.v7.app.AppCompatActivity;
+import android.view.View;
+
+import com.bumptech.glide.Glide;
+import com.github.chrisbanes.photoview.PhotoView;
+
+import java.io.File;
+
+/**
+ * An example full-screen activity that shows and hides the system UI (i.e.
+ * status bar and navigation/system bar) with user interaction.
+ */
+public class ImageViewFullscreen extends AppCompatActivity {
+ /**
+ * Whether or not the system UI should be auto-hidden after
+ * {@link #AUTO_HIDE_DELAY_MILLIS} milliseconds.
+ */
+ private static final boolean AUTO_HIDE = false;
+
+ /**
+ * If {@link #AUTO_HIDE} is set, the number of milliseconds to wait after
+ * user interaction before hiding the system UI.
+ */
+ private static final int AUTO_HIDE_DELAY_MILLIS = 3000;
+
+ /**
+ * Some older devices needs a small delay between UI widget updates
+ * and a change of the status and navigation bar.
+ */
+ private static final int UI_ANIMATION_DELAY = 300;
+ private final Handler mHideHandler = new Handler();
+ private View mContentView;
+ private final Runnable mHidePart2Runnable = new Runnable() {
+ @SuppressLint("InlinedApi")
+ @Override
+ public void run() {
+ // Delayed removal of status and navigation bar
+
+ // Note that some of these constants are new as of API 16 (Jelly Bean)
+ // and API 19 (KitKat). It is safe to use them, as they are inlined
+ // at compile-time and do nothing on earlier devices.
+ mContentView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE
+ | View.SYSTEM_UI_FLAG_FULLSCREEN
+ | View.SYSTEM_UI_FLAG_LAYOUT_STABLE
+ | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
+ | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
+ | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
+ }
+ };
+ private View mControlsView;
+ private final Runnable mShowPart2Runnable = new Runnable() {
+ @Override
+ public void run() {
+ // Delayed display of UI elements
+ ActionBar actionBar = getSupportActionBar();
+ if (actionBar != null) {
+ actionBar.show();
+ }
+ mControlsView.setVisibility(View.VISIBLE);
+ }
+ };
+ private boolean mVisible;
+ private final Runnable mHideRunnable = new Runnable() {
+ @Override
+ public void run() {
+ hide();
+ }
+ };
+ /**
+ * Touch listener to use for in-layout UI controls to delay hiding the
+ * system UI. This is to prevent the jarring behavior of controls going away
+ * while interacting with activity UI.
+ */
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ setContentView(R.layout.activity_image_view_fullscreen);
+
+ mVisible = true;
+ mControlsView = findViewById(R.id.fullscreen_content_controls);
+ mContentView = findViewById(R.id.image);
+
+
+ // Set up the user interaction to manually show or hide the system UI.
+ mContentView.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ toggle();
+ }
+ });
+
+ // Upon interacting with UI controls, delay any scheduled hide()
+ // operations to prevent the jarring behavior of controls going away
+ // while interacting with the UI.
+
+ PhotoView photoView = (PhotoView)mContentView;
+
+ Glide.with(this)
+ .load(Uri.parse(getIntent().getStringExtra("image")))
+ .into(photoView);
+
+
+ }
+
+ @Override
+ protected void onPostCreate(Bundle savedInstanceState) {
+ super.onPostCreate(savedInstanceState);
+
+ // Trigger the initial hide() shortly after the activity has been
+ // created, to briefly hint to the user that UI controls
+ // are available.
+ if(AUTO_HIDE)
+ delayedHide(100);
+ }
+
+ private void toggle() {
+ if (mVisible) {
+ hide();
+ } else {
+ show();
+ }
+ }
+
+ private void hide() {
+ // Hide UI first
+ ActionBar actionBar = getSupportActionBar();
+ if (actionBar != null) {
+ actionBar.hide();
+ }
+ mControlsView.setVisibility(View.GONE);
+ mVisible = false;
+
+ // Schedule a runnable to remove the status and navigation bar after a delay
+ mHideHandler.removeCallbacks(mShowPart2Runnable);
+ mHideHandler.postDelayed(mHidePart2Runnable, UI_ANIMATION_DELAY);
+ }
+
+ @SuppressLint("InlinedApi")
+ private void show() {
+ // Show the system bar
+ mContentView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
+ | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION);
+ mVisible = true;
+
+ // Schedule a runnable to display UI elements after a delay
+ mHideHandler.removeCallbacks(mHidePart2Runnable);
+ mHideHandler.postDelayed(mShowPart2Runnable, UI_ANIMATION_DELAY);
+ }
+
+ /**
+ * Schedules a call to hide() in delay milliseconds, canceling any
+ * previously scheduled calls.
+ */
+ private void delayedHide(int delayMillis) {
+ mHideHandler.removeCallbacks(mHideRunnable);
+ mHideHandler.postDelayed(mHideRunnable, delayMillis);
+ }
+
+
+}
diff --git a/app/src/main/java/com/pkmnapps/activitydo/ListActivity.java b/app/src/main/java/com/pkmnapps/activitydo/ListActivity.java
new file mode 100644
index 0000000..fda5ca9
--- /dev/null
+++ b/app/src/main/java/com/pkmnapps/activitydo/ListActivity.java
@@ -0,0 +1,150 @@
+package com.pkmnapps.activitydo;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.os.Bundle;
+import android.support.v7.app.AppCompatActivity;
+import android.support.v7.widget.DefaultItemAnimator;
+import android.support.v7.widget.LinearLayoutManager;
+import android.support.v7.widget.RecyclerView;
+import android.support.v7.widget.Toolbar;
+import android.util.Log;
+import android.view.KeyEvent;
+import android.view.MenuItem;
+import android.view.View;
+import android.view.WindowManager;
+import android.view.inputmethod.EditorInfo;
+import android.widget.EditText;
+import android.widget.TextView;
+
+import com.pkmnapps.activitydo.adapters.ListAdapter;
+import com.pkmnapps.activitydo.custominterfaces.ListActivityInterface;
+import com.pkmnapps.activitydo.databasehelpers.DBHelperList;
+import com.pkmnapps.activitydo.databasehelpers.DBHelperListItems;
+import com.pkmnapps.activitydo.dataclasses.ListItem;
+import com.pkmnapps.activitydo.dataclasses.ListWidget;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class ListActivity extends AppCompatActivity implements ListActivityInterface {
+ String lid,head;//lid is recieved
+ EditText headE;
+ Intent data;
+
+ List listItems;
+ ListAdapter listAdapter;
+ RecyclerView recyclerView;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_list);
+ Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
+ setSupportActionBar(toolbar);
+
+ getSupportActionBar().setDisplayHomeAsUpEnabled(true);
+
+ getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
+
+ final TextView addItem = (TextView)findViewById(R.id.addItemTextView);
+
+ lid = getIntent().getStringExtra("lid");
+ head = getIntent().getStringExtra("head");
+ data = getIntent();
+
+ headE = (EditText)findViewById(R.id.head_editText);
+ headE.setText(head);
+
+ addItem.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ //add list
+ newListItem();
+ }
+ });
+ recyclerView = (RecyclerView)findViewById(R.id.recycler_view);
+ RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(ListActivity.this);
+ recyclerView.setLayoutManager(mLayoutManager);
+ recyclerView.setItemAnimator(new DefaultItemAnimator());
+ recyclerView.setNestedScrollingEnabled(false);
+ //recyclerView.setItemViewCacheSize(100);
+ recyclerView.setOnKeyListener(new View.OnKeyListener() {
+ @Override
+ public boolean onKey(View v, int keyCode, KeyEvent event) {
+
+ return false;
+ }
+ });
+ loadData();
+
+ listAdapter = new ListAdapter(listItems, ListActivity.this);
+ recyclerView.setAdapter(listAdapter);
+
+
+
+ setResult(Activity.RESULT_OK,data);
+ }
+
+ @Override
+ public void onBackPressed() {
+ clearFocus();
+ super.onBackPressed();
+ }
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ switch (item.getItemId()) {
+ case android.R.id.home:
+ // app icon in action bar clicked; goto parent activity.
+ onBackPressed();
+ return true;
+ default:
+ return super.onOptionsItemSelected(item);
+ }
+ }
+
+ @Override
+ protected void onPause() {//will run always no-matter how activity is closed
+ clearFocus();
+ //save data on pause activity
+ head = headE.getText().toString();
+
+ new DBHelperList(ListActivity.this).updateHead(lid,head);
+ DBHelperListItems dbHelperListItems = new DBHelperListItems(ListActivity.this);
+ //save listitems
+ for (ListItem listItem : listItems) {
+ if (dbHelperListItems.updateActivity(listItem)==0)
+ dbHelperListItems.insertListItem(listItem);
+ }
+
+ super.onPause();
+ }
+
+ @Override
+ public void deleteListItem(ListItem listItem) {
+ listItems.remove(listItem);
+ }
+
+ @Override
+ public void newListItem() {
+ //save previous list first
+
+ listItems.add(new ListItem(String.valueOf(System.currentTimeMillis()), lid,"",false));
+ listAdapter.notifyDataSetChanged();
+ }
+
+ public void loadData(){
+ listItems = new ArrayList<>();
+ DBHelperListItems dbHelperListItems = new DBHelperListItems(ListActivity.this);
+ listItems = dbHelperListItems.getAllListItemsAsList(lid);
+ }
+
+ public void clearFocus(){
+ View current = getCurrentFocus();
+ if (current != null) {
+ current.clearFocus();
+ }
+ }
+
+
+}
diff --git a/app/src/main/java/com/pkmnapps/activitydo/MConstants.java b/app/src/main/java/com/pkmnapps/activitydo/MConstants.java
new file mode 100644
index 0000000..8157c3a
--- /dev/null
+++ b/app/src/main/java/com/pkmnapps/activitydo/MConstants.java
@@ -0,0 +1,22 @@
+package com.pkmnapps.activitydo;
+
+public class MConstants {
+ public static String[] colors = {"#3f79b4","#50933c","#afaf41","#af4541","#673a9e"};
+ public static final int textW = 1;
+ public static final int listW = 2;
+ public static final int imageW = 3;
+ public static final int audioW = 4;
+
+
+ public static final int REQUEST_STORAGE = 0;
+ public static final int REQUEST_IMAGE_CAPTURE = 1;
+ public static final int REQUEST_LOAD_IMAGE = 2;
+
+ public static final int REQUEST_NEW_NOTE = 3;
+
+ public static final int REQUEST_NEW_LIST = 4;
+
+
+}
+
+
diff --git a/app/src/main/java/com/pkmnapps/activitydo/MainActivity.java b/app/src/main/java/com/pkmnapps/activitydo/MainActivity.java
new file mode 100644
index 0000000..36873d5
--- /dev/null
+++ b/app/src/main/java/com/pkmnapps/activitydo/MainActivity.java
@@ -0,0 +1,151 @@
+package com.pkmnapps.activitydo;
+
+import android.content.Intent;
+import android.graphics.Color;
+import android.graphics.ColorFilter;
+import android.graphics.PorterDuff;
+import android.graphics.drawable.Drawable;
+import android.net.Uri;
+import android.os.Bundle;
+import android.support.design.widget.NavigationView;
+import android.support.v4.app.FragmentManager;
+import android.support.v4.app.FragmentTransaction;
+import android.support.v4.view.GravityCompat;
+import android.support.v4.widget.DrawerLayout;
+import android.support.v7.app.ActionBarDrawerToggle;
+import android.support.v7.app.AppCompatActivity;
+import android.support.v7.widget.Toolbar;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.SubMenu;
+
+import com.pkmnapps.activitydo.databasehelpers.DBHelper;
+import com.pkmnapps.activitydo.dataclasses.ActivityData;
+
+
+public class MainActivity extends AppCompatActivity
+ implements NavigationView.OnNavigationItemSelectedListener,
+ HomeFragment.OnFragmentInteractionListener
+{
+ boolean home = true;
+ NavigationView navigationView;
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_main);
+ Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
+ setSupportActionBar(toolbar);
+
+ DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
+ ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
+ this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
+ drawer.addDrawerListener(toggle);
+ toggle.syncState();
+
+ navigationView = (NavigationView) findViewById(R.id.nav_view);
+ navigationView.setNavigationItemSelectedListener(this);
+
+ menuAddPinned();
+
+ navigationView.setCheckedItem(R.id.nav_home);
+ //Set home fragment to load first here
+ FragmentManager fragmentManager = getSupportFragmentManager();
+ FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
+ fragmentTransaction.replace(R.id.fragment_parent_main,new HomeFragment(),"back").commit();
+
+ }
+
+ public void menuAddPinned(){
+ //add items to nav menu
+ Menu menu = navigationView.getMenu();
+ SubMenu subMenu = menu.findItem(R.id.nav_pinned).getSubMenu();
+ subMenu.clear();
+ Drawable d = getResources().getDrawable(R.drawable.ic_label_white_24dp);
+ for(final ActivityData a:new DBHelper(MainActivity.this).getAllActivitiesAsList()){
+ if(a.getPinned()) {//only pinned
+ subMenu.add(a.getName()).setIcon(d).setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
+ @Override
+ public boolean onMenuItemClick(MenuItem item) {
+ //open that activity
+ //open openActivity and send this data to it
+ Bundle bundle = new Bundle();
+ bundle.putString("name", a.getName());
+ bundle.putString("id", a.getId());
+ bundle.putString("color", a.getColor());
+ bundle.putBoolean("pinned", a.getPinned());
+
+ Intent i = new Intent(MainActivity.this, TaskActivity.class);
+ i.putExtra("activityData", bundle);
+ startActivity(i);
+ return false;
+ }
+ });
+ }
+ }
+ }
+
+ @Override
+ public void onBackPressed() {
+ DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
+ if (drawer.isDrawerOpen(GravityCompat.START)) {
+ drawer.closeDrawer(GravityCompat.START);
+ } else {
+ if(home)
+ super.onBackPressed();
+ else {
+ //load home frag here
+ //Set home fragment to load here
+ navigationView.setCheckedItem(R.id.nav_home);
+ }
+ }
+ }
+
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+ // Inflate the menu; this adds items to the action bar if it is present.
+ getMenuInflater().inflate(R.menu.main, 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);
+ }
+
+ @SuppressWarnings("StatementWithEmptyBody")
+ @Override
+ public boolean onNavigationItemSelected(MenuItem item) {
+ FragmentManager fragmentManager = getSupportFragmentManager();
+ FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
+
+ // Handle navigation view item clicks here.
+ int id = item.getItemId();
+ home = false;
+ if (id == R.id.nav_home) {
+ home = true;
+ fragmentTransaction.replace(R.id.fragment_parent_main,new HomeFragment()).commit();
+ }
+ else if(id == R.id.nav_share){
+
+ }
+
+ DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
+ drawer.closeDrawer(GravityCompat.START);
+ return true;
+ }
+
+ @Override
+ public void onFragmentInteraction(Uri uri) {
+
+ }
+}
diff --git a/app/src/main/java/com/pkmnapps/activitydo/NoteActivity.java b/app/src/main/java/com/pkmnapps/activitydo/NoteActivity.java
new file mode 100644
index 0000000..4746cfa
--- /dev/null
+++ b/app/src/main/java/com/pkmnapps/activitydo/NoteActivity.java
@@ -0,0 +1,77 @@
+package com.pkmnapps.activitydo;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.os.Bundle;
+import android.os.PersistableBundle;
+import android.support.design.widget.FloatingActionButton;
+import android.support.design.widget.Snackbar;
+import android.support.v7.app.AppCompatActivity;
+import android.support.v7.widget.Toolbar;
+import android.util.Log;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.View;
+import android.widget.EditText;
+
+import com.pkmnapps.activitydo.databasehelpers.DBHelperText;
+import com.pkmnapps.activitydo.dataclasses.SimpleTextWidget;
+
+public class NoteActivity extends AppCompatActivity {
+ String uid,head,body;
+ EditText headE,bodyE;
+ Intent data;
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_note);
+ Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
+ setSupportActionBar(toolbar);
+
+ getSupportActionBar().setDisplayHomeAsUpEnabled(true);
+
+ uid = getIntent().getStringExtra("uid");
+ head = getIntent().getStringExtra("head");
+ body = getIntent().getStringExtra("body");
+ data = getIntent();
+
+ headE = (EditText)findViewById(R.id.note_head_editText);
+ bodyE = (EditText)findViewById(R.id.note_body_editText);
+ headE.setText(head);
+ bodyE.setText(body);
+
+ setResult(Activity.RESULT_OK,data);
+
+ }
+
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+ getMenuInflater().inflate(R.menu.menu_task_activity, menu);
+ return super.onCreateOptionsMenu(menu);
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ switch (item.getItemId()) {
+ case android.R.id.home:
+ // app icon in action bar clicked; goto parent activity.
+ this.finish();
+ return true;
+ default:
+ return super.onOptionsItemSelected(item);
+ }
+ }
+
+ @Override
+ protected void onPause() {
+ head = headE.getText().toString();
+ body = bodyE.getText().toString();
+ DBHelperText dbHelperText = new DBHelperText(NoteActivity.this);
+ //save to database
+ dbHelperText.updateHeadBody(uid, head, body);
+
+ super.onPause();
+ }
+
+
+}
diff --git a/app/src/main/java/com/pkmnapps/activitydo/TaskActivity.java b/app/src/main/java/com/pkmnapps/activitydo/TaskActivity.java
new file mode 100644
index 0000000..e48f14c
--- /dev/null
+++ b/app/src/main/java/com/pkmnapps/activitydo/TaskActivity.java
@@ -0,0 +1,573 @@
+package com.pkmnapps.activitydo;
+
+import android.Manifest;
+import android.annotation.SuppressLint;
+import android.app.Activity;
+import android.app.AlertDialog;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.graphics.Rect;
+import android.net.Uri;
+import android.os.Bundle;
+import android.os.Environment;
+import android.provider.MediaStore;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+import android.support.v4.app.ActivityCompat;
+import android.support.v4.content.FileProvider;
+import android.support.v7.app.AppCompatActivity;
+import android.support.v7.widget.DefaultItemAnimator;
+import android.support.v7.widget.LinearLayoutManager;
+import android.support.v7.widget.RecyclerView;
+import android.support.v7.widget.Toolbar;
+import android.support.v7.widget.helper.ItemTouchHelper;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.MotionEvent;
+import android.view.View;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.ImageButton;
+import android.widget.ImageView;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import com.bumptech.glide.Glide;
+import com.flipboard.bottomsheet.BottomSheetLayout;
+import com.flipboard.bottomsheet.commons.ImagePickerSheetView;
+import com.flipboard.bottomsheet.commons.MenuSheetView;
+import com.pkmnapps.activitydo.adapters.ActivityContentAdapter;
+import com.pkmnapps.activitydo.custominterfaces.TaskActivityInterface;
+import com.pkmnapps.activitydo.databasehelpers.DBHelper;
+import com.pkmnapps.activitydo.databasehelpers.DBHelperImage;
+import com.pkmnapps.activitydo.databasehelpers.DBHelperList;
+import com.pkmnapps.activitydo.databasehelpers.DBHelperListItems;
+import com.pkmnapps.activitydo.databasehelpers.DBHelperText;
+import com.pkmnapps.activitydo.databasehelpers.DBHelperWidgets;
+import com.pkmnapps.activitydo.dataclasses.ActivityData;
+import com.pkmnapps.activitydo.dataclasses.ImageWidget;
+import com.pkmnapps.activitydo.dataclasses.ListWidget;
+import com.pkmnapps.activitydo.dataclasses.SimpleTextWidget;
+import com.pkmnapps.activitydo.dataclasses.Widget;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import static com.pkmnapps.activitydo.MConstants.REQUEST_LOAD_IMAGE;
+import static com.pkmnapps.activitydo.MConstants.REQUEST_STORAGE;
+
+public class TaskActivity extends AppCompatActivity implements TaskActivityInterface{
+ public ActivityData activityData;
+ BottomSheetLayout bottomSheetLayout;
+ View currentSheetView;
+ RecyclerView recyclerView;
+ ActivityContentAdapter activityContentAdapter;
+ List widgets;
+ Uri cameraImageUri = null;
+ ImageView selectedImage;
+ String tempUid;
+ DBHelperWidgets dbHelperWidgets;
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ Bundle bundle = getIntent().getBundleExtra("activityData");
+ activityData = new ActivityData(bundle.getString("id"),bundle.getString("name"),bundle.getString("color"),bundle.getBoolean("pinned"),0);
+
+ setTheme(colorTheme(activityData.getColor()));
+
+ setContentView(R.layout.activity_task);
+ Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
+ toolbar.setTitle(activityData.getName());
+ setSupportActionBar(toolbar);
+ getSupportActionBar().setDisplayHomeAsUpEnabled(true);
+
+ dbHelperWidgets = new DBHelperWidgets(TaskActivity.this);
+
+ bottomSheetLayout = (BottomSheetLayout)findViewById(R.id.bottomsheet);
+ selectedImage =(ImageView)findViewById(R.id.imageView);
+ setUpRecyclerView();
+ initialiseRecyclerViewData();
+ }
+
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+ getMenuInflater().inflate(R.menu.menu_task_activity, menu);
+ return super.onCreateOptionsMenu(menu);
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ switch (item.getItemId()) {
+ case android.R.id.home:
+ // app icon in action bar clicked; goto parent activity.
+ this.finish();
+ return true;
+ case R.id.action_add_widget:
+ displayWidgetChoser();
+ return true;
+ default:
+ return super.onOptionsItemSelected(item);
+ }
+ }
+
+ @Override
+ public void onBackPressed() {
+ if(bottomSheetLayout.isSheetShowing()){
+ bottomSheetLayout.dismissSheet();
+ }
+ else
+ super.onBackPressed();
+ }
+
+ @Override
+ public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
+ super.onActivityResult(requestCode, resultCode, data);
+ Log.w("n",String.valueOf(requestCode));
+ Log.w("n",String.valueOf(resultCode));
+ if (resultCode == Activity.RESULT_OK) {
+ Uri selectedImage = null;
+ if (requestCode == REQUEST_LOAD_IMAGE && data != null) { //image from gallery
+ selectedImage = data.getData();
+ if (selectedImage != null) {
+ addImageWidget(selectedImage);
+ } else {
+ genericError();
+ }
+ } else if (requestCode == MConstants.REQUEST_IMAGE_CAPTURE) {//image from camera
+ // Do something with imagePath
+ selectedImage = cameraImageUri;
+ if (selectedImage != null) {
+ addImageWidget(selectedImage);
+ } else {
+ genericError();
+ }
+ } else if(requestCode == MConstants.REQUEST_NEW_NOTE && data != null){
+
+ //save note
+ String uid = data.getStringExtra("uid");
+ int index = data.getIntExtra("index",-1000);
+ DBHelperText dbHelperText = new DBHelperText(TaskActivity.this);
+
+ //update note
+ SimpleTextWidget s;
+ if(index==-1000) {//for new note
+ s = dbHelperText.getTextWidget(uid);
+ if(s!=null)
+ widgets.add(0,new Widget(MConstants.textW,s,uid,0));
+ }
+ else{//for edited note
+ s = dbHelperText.getTextWidget(uid);
+ if(s!=null) {
+ widgets.set(index, new Widget(MConstants.textW, s,uid,index));//replacing widget
+ }else {
+ widgets.remove(index);//delete as it doesnt exist
+ }
+ }
+ //update UI
+ dbHelperWidgets.updateAllWidgetSortOrders(widgets);
+ activityContentAdapter.notifyDataSetChanged();
+
+ } else if(requestCode == MConstants.REQUEST_NEW_LIST && data != null){
+ DBHelperList dbHelperList = new DBHelperList(TaskActivity.this);
+ String lid = data.getStringExtra("lid");
+ ListWidget listWidget = dbHelperList.getListWidget(lid);
+
+ int index = data.getIntExtra("index",-1000);
+ if(index==-1000) {//new list
+ widgets.add(0,new Widget(MConstants.listW, listWidget,lid,0));
+ }
+ else {//edit list
+ widgets.set(index, new Widget(MConstants.listW, listWidget,lid,index));
+ }
+ //update ui
+ dbHelperWidgets.updateAllWidgetSortOrders(widgets);
+ activityContentAdapter.notifyDataSetChanged();
+ }
+ }
+ }
+
+ public void displayWidgetChoser(){
+ //show bottomsheet
+ MenuSheetView menuSheetView =
+ new MenuSheetView(TaskActivity.this, MenuSheetView.MenuType.LIST, "Chose widget", new MenuSheetView.OnMenuItemClickListener() {
+ @Override
+ public boolean onMenuItemClick(MenuItem item) {
+ if (bottomSheetLayout.isSheetShowing()) {
+ bottomSheetLayout.dismissSheet();
+ }
+ switch (item.getItemId()){
+ case R.id.item_note:
+ createNote();
+ return true;
+ case R.id.item_list:
+ createList();
+ return true;
+ case R.id.item_image:
+ if (checkNeedsPermission()) {
+ requestStoragePermission();
+ } else {
+ createImageSheet();
+ }
+ return true;
+ }
+
+ return true;
+ }
+ });
+ menuSheetView.inflateMenu(R.menu.widget_menu);
+ bottomSheetLayout.showWithSheetView(menuSheetView);
+ }
+
+ public void initialiseRecyclerViewData(){
+
+ DBHelperWidgets dbHelperWidgets = new DBHelperWidgets(TaskActivity.this);
+
+ //add all simpleTextWidgets
+ DBHelperText dbHelperText = new DBHelperText(TaskActivity.this);
+ for (SimpleTextWidget o :dbHelperText.getAllTextsAsList(activityData.getId())) {
+ if(o!=null) {
+ widgets.add(new Widget(MConstants.textW,o,o.getUid(),dbHelperWidgets.getSortValue(o.getUid())));
+ }
+ }
+ //add all lists
+ DBHelperList dbHelperList = new DBHelperList(TaskActivity.this);
+ for(ListWidget o:dbHelperList.getAllListAsList(activityData.getId())){
+ if(o!=null) {
+ widgets.add(new Widget(MConstants.listW, o,o.getUid(),dbHelperWidgets.getSortValue(o.getUid())));
+ }
+ }
+
+ //add all image widgets
+ DBHelperImage dbHelperImage = new DBHelperImage(TaskActivity.this);
+ for(ImageWidget o:dbHelperImage.getAllImagesAsList(activityData.getId())){
+ if(o!=null)
+ widgets.add(new Widget(MConstants.imageW,o,o.getUid(),dbHelperWidgets.getSortValue(o.getUid())));
+ }
+ sortWidgetList();
+ //sort the list
+ activityContentAdapter.notifyDataSetChanged();
+ }
+ public void sortWidgetList(){
+ Boolean swap;
+ for(int i = 0;iwidgets.get(j+1).getSortOrder()){
+ Widget temp = widgets.get(j);
+ widgets.set(j,widgets.get(j+1));
+ widgets.set(j+1,temp);
+ swap = true;
+ }
+ }
+ if(!swap)
+ break;
+ }
+ }
+ public void setUpRecyclerView(){
+ recyclerView = (RecyclerView)findViewById(R.id.recycler_view);
+ RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(TaskActivity.this,LinearLayoutManager.VERTICAL,false);
+ recyclerView.setLayoutManager(mLayoutManager);
+ recyclerView.setItemAnimator(new DefaultItemAnimator());
+ recyclerView.setNestedScrollingEnabled(false);
+ ItemTouchHelper.Callback itcallback = new ItemTouchHelper.Callback() {//for sorting
+ @Override
+ public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
+ return makeFlag(ItemTouchHelper.ACTION_STATE_DRAG,
+ ItemTouchHelper.DOWN | ItemTouchHelper.UP);
+ }
+
+ @Override
+ public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
+ // get the viewHolder's and target's positions in your adapter data, swap them
+ Collections.swap(widgets, viewHolder.getAdapterPosition(), target.getAdapterPosition());
+// widgets.get(viewHolder.getAdapterPosition()).setSortOrder(target.getAdapterPosition());
+// widgets.get(target.getAdapterPosition()).setSortOrder(viewHolder.getAdapterPosition());
+ //s
+ // and notify the adapter that its dataset has changed
+ activityContentAdapter.notifyItemMoved(viewHolder.getAdapterPosition(), target.getAdapterPosition());
+ return true;
+ }
+
+ @Override
+ public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
+
+ }
+
+ @Override
+ public void onMoved(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, int fromPos, RecyclerView.ViewHolder target, int toPos, int x, int y) {
+ super.onMoved(recyclerView, viewHolder, fromPos, target, toPos, x, y);
+ dbHelperWidgets.updateAllWidgetSortOrders(widgets);
+ }
+ };
+ ItemTouchHelper.Callback itcallbackswipe = new ItemTouchHelper.Callback() {
+ @Override
+ public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
+ return makeFlag(ItemTouchHelper.ACTION_STATE_SWIPE,ItemTouchHelper.LEFT|ItemTouchHelper.RIGHT);
+
+ }
+
+ @Override
+ public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
+ return false;
+ }
+
+ @Override
+ public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
+ deleteWidget(widgets.get(viewHolder.getAdapterPosition()));
+ }
+ };
+ ItemTouchHelper itemTouchHelperSwipe = new ItemTouchHelper(itcallbackswipe);
+ ItemTouchHelper itemTouchHelper = new ItemTouchHelper(itcallback);
+ itemTouchHelper.attachToRecyclerView(recyclerView);
+ itemTouchHelperSwipe.attachToRecyclerView(recyclerView);
+
+ widgets = new ArrayList<>();
+ activityContentAdapter = new ActivityContentAdapter(widgets,TaskActivity.this);
+
+ recyclerView.setAdapter(activityContentAdapter);
+ }
+
+ public int colorTheme(String colorName){
+ switch (colorName){
+ case "#3f79b4":
+ return R.style.AppTheme_NoActionBar_blue;
+ case "#50933c":
+ return R.style.AppTheme_NoActionBar_green;
+ case "#afaf41":
+ return R.style.AppTheme_NoActionBar_yellow;
+ case "#af4541":
+ return R.style.AppTheme_NoActionBar_red;
+ case "#673a9e":
+ return R.style.AppTheme_NoActionBar_purple;
+
+ default:
+ return R.style.AppTheme_NoActionBar;
+
+ }
+ }
+
+ public void createNote() {
+ Intent intent = new Intent(TaskActivity.this,NoteActivity.class);
+ String uid = String.valueOf(System.currentTimeMillis());
+ intent.putExtra("uid",uid);
+ new DBHelperText(TaskActivity.this).insertText(uid,activityData.getId(),"","");
+ startActivityForResult(intent,MConstants.REQUEST_NEW_NOTE);
+ }
+ public void createList() {
+ Intent intent = new Intent(TaskActivity.this,ListActivity.class);
+ String lid = String.valueOf(System.currentTimeMillis());
+ intent.putExtra("lid",lid);
+ intent.putExtra("aid",activityData.getId());
+ //create a list in database
+ new DBHelperList(TaskActivity.this).insertList(lid,activityData.getId(),"");
+ startActivityForResult(intent,MConstants.REQUEST_NEW_LIST);
+ }
+ public void createImageSheet() {
+ ImagePickerSheetView sheetView = new ImagePickerSheetView.Builder(this)
+ .setMaxItems(30)
+ .setShowCameraOption(createCameraIntent() != null)
+ .setShowPickerOption(createPickIntent() != null)
+ .setImageProvider(new ImagePickerSheetView.ImageProvider() {
+ @Override
+ public void onProvideImage(ImageView imageView, Uri imageUri, int size) {//feeds image to sheet views
+ Glide.with(TaskActivity.this)
+ .load(imageUri)
+ .into(imageView);
+ }
+ })
+ .setOnTileSelectedListener(new ImagePickerSheetView.OnTileSelectedListener() {
+ @Override
+ public void onTileSelected(ImagePickerSheetView.ImagePickerTile selectedTile) {
+ bottomSheetLayout.dismissSheet();
+ tempUid = String.valueOf(System.currentTimeMillis());//do not remove this
+ if (selectedTile.isCameraTile()) {
+ dispatchTakePictureIntent();
+ } else if (selectedTile.isPickerTile()) {
+ startActivityForResult(createPickIntent(), REQUEST_LOAD_IMAGE);
+ } else if (selectedTile.isImageTile()) {
+ if(selectedTile.getImageUri()!=null)
+ addImageWidget(selectedTile.getImageUri());
+ } else {
+ genericError();
+ }
+ }
+ })
+ .setTitle("Choose an image...")
+ .create();
+
+ bottomSheetLayout.showWithSheetView(sheetView);
+ }
+
+ private boolean checkNeedsPermission() {
+ return ActivityCompat.checkSelfPermission(TaskActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED;
+ }
+
+ private void requestStoragePermission() {
+ if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
+ ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_STORAGE);
+ } else {
+ // Eh, prompt anyway
+ ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_STORAGE);
+ }
+ }
+ @Override
+
+ public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
+ if (requestCode == REQUEST_STORAGE) {
+ if (grantResults.length == 1 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
+ createImageSheet();
+ } else {
+ // Permission denied
+ Toast.makeText(this, "Permission denied :/", Toast.LENGTH_SHORT).show();
+ }
+ } else {
+ super.onRequestPermissionsResult(requestCode, permissions, grantResults);
+ }
+ }
+
+ private void addImageWidget(Uri selectedImageUri) {
+ //save image uri to image database
+ ImageWidget imageWidget = new ImageWidget(tempUid,activityData.getId(),selectedImageUri.toString());
+ DBHelperImage dbHelperImage = new DBHelperImage(TaskActivity.this);
+ dbHelperImage.insertImage(imageWidget);
+
+ //show in widgets
+ widgets.add(0,new Widget(MConstants.imageW,imageWidget,tempUid,0));
+ //update UI
+ dbHelperWidgets.updateAllWidgetSortOrders(widgets);
+ activityContentAdapter.notifyDataSetChanged();
+ }
+
+ @Nullable
+ private Intent createPickIntent() {
+ Intent picImageIntent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
+ if (picImageIntent.resolveActivity(getPackageManager()) != null) {
+ return picImageIntent;
+ } else {
+ return null;
+ }
+ }
+ @Nullable
+ private Intent createCameraIntent() {
+ Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
+ if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
+ return takePictureIntent;
+ } else {
+ return null;
+ }
+ }
+
+ private void dispatchTakePictureIntent() {
+ Intent takePictureIntent = createCameraIntent();
+ // Ensure that there's a camera activity to handle the intent
+ if (takePictureIntent != null) {
+ try {
+ File imageFile = createImageFile();
+ // Save a file: path for use with ACTION_VIEW intents
+ cameraImageUri = FileProvider.getUriForFile(TaskActivity.this,"com.pkmnapps.activitydo.fileprovider",imageFile);
+
+ takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, cameraImageUri);
+ startActivityForResult(takePictureIntent, MConstants.REQUEST_IMAGE_CAPTURE);
+ } catch (Exception e) {
+ // Error occurred while creating the File
+ genericError("Could not create imageFile for camera");
+ }
+ }
+ }
+
+ private void genericError() {
+ genericError(null);
+ }
+
+ private void genericError(String message) {
+ Toast.makeText(this, message == null ? "Something went wrong." : message, Toast.LENGTH_SHORT).show();
+ }
+
+ private File createImageFile() {
+ // Create an image file name
+ String imageFileName = tempUid + ".jpg";
+ return new File(this.getExternalFilesDir(Environment.DIRECTORY_PICTURES),imageFileName);
+ }
+
+
+ @SuppressLint("ClickableViewAccessibility")
+ public void createAudio() {
+ currentSheetView = LayoutInflater.from(TaskActivity.this).inflate(R.layout.audio_record_view,bottomSheetLayout,false);
+ bottomSheetLayout.showWithSheetView(currentSheetView);
+ final ImageButton imageButton = (ImageButton)currentSheetView.findViewById(R.id.recButton);
+ final TextView textView = (TextView)currentSheetView.findViewById(R.id.recText);
+
+ }
+
+
+ @Override
+ public void editWidget(final Widget widget) {
+
+ switch (widget.getType()) {
+ case MConstants.textW:
+ final SimpleTextWidget simpleTextWidget = (SimpleTextWidget)widget.getObject();
+ Intent intent = new Intent(TaskActivity.this,NoteActivity.class);
+ intent.putExtra("uid",simpleTextWidget.getUid());
+ intent.putExtra("head",simpleTextWidget.getHead());
+ intent.putExtra("body",simpleTextWidget.getBody());
+ intent.putExtra("index",widgets.indexOf(widget));
+ startActivityForResult(intent,MConstants.REQUEST_NEW_NOTE);
+ break;
+ case MConstants.listW:
+ final ListWidget listWidget = (ListWidget) widget.getObject();
+ Intent intent2 = new Intent(TaskActivity.this,ListActivity.class);
+ intent2.putExtra("lid",listWidget.getUid());
+ intent2.putExtra("head",listWidget.getHead());
+ intent2.putExtra("index",widgets.indexOf(widget));
+ intent2.putExtra("edit","1");
+ startActivityForResult(intent2,MConstants.REQUEST_NEW_LIST);
+ break;
+
+ }
+
+
+ }
+
+ public void deleteWidget(final Widget widget){
+ //show dialog
+ AlertDialog.Builder builder = new AlertDialog.Builder(TaskActivity.this);
+ builder.setTitle("Delete ?");
+ builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ //delete from list
+ widgets.remove(widget);
+ activityContentAdapter.notifyDataSetChanged();
+ dbHelperWidgets.updateAllWidgetSortOrders(widgets);
+ //delete rom database
+ switch (widget.getType()){
+ case MConstants.textW:
+ new DBHelperText(TaskActivity.this).deleteText(((SimpleTextWidget)widget.getObject()).getUid());
+ break;
+ case MConstants.listW:
+ new DBHelperList(TaskActivity.this).deleteList(((ListWidget)widget.getObject()).getUid());
+ break;
+ case MConstants.imageW:
+ new DBHelperImage(TaskActivity.this).deleteImage(((ImageWidget)widget.getObject()).getUid());
+ break;
+ case MConstants.audioW:
+ break;
+ }
+ }
+ });
+ builder.setOnCancelListener(new DialogInterface.OnCancelListener() {
+ @Override
+ public void onCancel(DialogInterface dialog) {
+ activityContentAdapter.notifyDataSetChanged();
+ }
+ });
+ builder.show();
+ }
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/pkmnapps/activitydo/adapters/ActivityAdapter.java b/app/src/main/java/com/pkmnapps/activitydo/adapters/ActivityAdapter.java
new file mode 100644
index 0000000..2b3b829
--- /dev/null
+++ b/app/src/main/java/com/pkmnapps/activitydo/adapters/ActivityAdapter.java
@@ -0,0 +1,105 @@
+package com.pkmnapps.activitydo.adapters;
+
+
+import android.content.Intent;
+import android.graphics.Color;
+import android.os.Bundle;
+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.CheckBox;
+import android.widget.ImageButton;
+import android.widget.TextView;
+
+import com.pkmnapps.activitydo.databasehelpers.DBHelper;
+import com.pkmnapps.activitydo.R;
+import com.pkmnapps.activitydo.TaskActivity;
+import com.pkmnapps.activitydo.custominterfaces.HomeFragInterace;
+import com.pkmnapps.activitydo.dataclasses.ActivityData;
+
+import java.util.List;
+
+public class ActivityAdapter extends RecyclerView.Adapter {
+
+ private List activityDataList;
+ private HomeFragInterace homeFrag;
+ public class MyViewHolder extends RecyclerView.ViewHolder {
+ public TextView name;
+ public CheckBox pinned;
+ public ImageButton edit;
+ public View v;
+
+ public MyViewHolder(View view) {
+ super(view);
+ name = (TextView)view.findViewById(R.id.nameTextView);
+ pinned = (CheckBox)view.findViewById(R.id.pinCheckBox);
+ v = (View)view.findViewById(R.id.colorView);
+ edit = (ImageButton)view.findViewById(R.id.edit_button);
+ }
+ }
+
+ public ActivityAdapter(List activityDataList,HomeFragInterace homeFrag) {
+ this.activityDataList = activityDataList;
+ this.homeFrag = homeFrag;
+ }
+
+ @NonNull
+ @Override
+ public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
+ View itemView = LayoutInflater.from(parent.getContext())
+ .inflate(R.layout.recycler_activity_layout, parent, false);
+
+ return new MyViewHolder(itemView);
+ }
+
+ @Override
+ public void onBindViewHolder(@NonNull final MyViewHolder holder, int position) {
+ final ActivityData activityData = activityDataList.get(position);
+ holder.pinned.setChecked(activityData.getPinned());
+ holder.name.setText(activityData.getName());
+ holder.v.setBackgroundColor(Color.parseColor(activityData.getColor()));
+ holder.pinned.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ DBHelper dbHelper = new DBHelper(holder.itemView.getContext());
+ if(holder.pinned.isChecked()){
+ dbHelper.pinActivity(activityData.getId(),1);
+ }
+ else{
+ dbHelper.pinActivity(activityData.getId(),0);
+ }
+ homeFrag.updatePinnedMenu();
+ }
+ });
+ holder.edit.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ homeFrag.displayEditDialog(activityData);
+ }
+ });
+ holder.itemView.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ //open openActivity and send this data to it
+ Bundle bundle = new Bundle();
+ bundle.putString("name",activityData.getName());
+ bundle.putString("id",activityData.getId());
+ bundle.putString("color",activityData.getColor());
+ bundle.putBoolean("pinned",activityData.getPinned());
+
+ Intent i = new Intent(holder.itemView.getContext(), TaskActivity.class);
+ i.putExtra("activityData",bundle);
+ holder.itemView.getContext().startActivity(i);
+ }
+ });
+ }
+
+ @Override
+ public int getItemCount() {
+ return activityDataList.size();
+ }
+
+
+}
diff --git a/app/src/main/java/com/pkmnapps/activitydo/adapters/ActivityContentAdapter.java b/app/src/main/java/com/pkmnapps/activitydo/adapters/ActivityContentAdapter.java
new file mode 100644
index 0000000..c8ce998
--- /dev/null
+++ b/app/src/main/java/com/pkmnapps/activitydo/adapters/ActivityContentAdapter.java
@@ -0,0 +1,159 @@
+package com.pkmnapps.activitydo.adapters;
+
+import android.content.Intent;
+import android.net.Uri;
+import android.support.annotation.NonNull;
+import android.support.v7.widget.DefaultItemAnimator;
+import android.support.v7.widget.LinearLayoutManager;
+import android.support.v7.widget.RecyclerView;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import com.bumptech.glide.Glide;
+import com.pkmnapps.activitydo.ImageViewFullscreen;
+import com.pkmnapps.activitydo.MConstants;
+import com.pkmnapps.activitydo.R;
+import com.pkmnapps.activitydo.custominterfaces.TaskActivityInterface;
+import com.pkmnapps.activitydo.databasehelpers.DBHelperListItems;
+import com.pkmnapps.activitydo.dataclasses.ImageWidget;
+import com.pkmnapps.activitydo.dataclasses.ListWidget;
+import com.pkmnapps.activitydo.dataclasses.SimpleTextWidget;
+import com.pkmnapps.activitydo.dataclasses.Widget;
+
+import java.util.List;
+
+public class ActivityContentAdapter extends RecyclerView.Adapter{
+
+ List widgets;
+ TaskActivityInterface taskActivityInterface;
+ public class MyTextViewHolder extends RecyclerView.ViewHolder {
+ public TextView head,body;
+ public MyTextViewHolder(View view) {
+ super(view);
+ head = (TextView)view.findViewById(R.id.head_textView);
+ body = (TextView)view.findViewById(R.id.body_textView);
+ }
+ }
+ public class MyListViewHolder extends RecyclerView.ViewHolder {
+ public TextView head;
+ public RecyclerView recyclerView;
+ public MyListViewHolder(View view) {
+ super(view);
+ head = (TextView)view.findViewById(R.id.head_textView);
+ recyclerView = (RecyclerView)view.findViewById(R.id.recycler_view);
+ }
+ }
+ public class MyImageViewHolder extends RecyclerView.ViewHolder {
+ public ImageView imageView;
+ public MyImageViewHolder(View view) {
+ super(view);
+ imageView = (ImageView)view.findViewById(R.id.widget_imageView);
+ }
+ }
+ public class MyAudioViewHolder extends RecyclerView.ViewHolder {
+
+ public MyAudioViewHolder(View view) {
+ super(view);
+
+ }
+ }
+
+ public ActivityContentAdapter(List widgets, TaskActivityInterface taskActivityInterface) {
+ this.widgets = widgets;
+ this.taskActivityInterface = taskActivityInterface;
+ }
+
+ @NonNull
+ @Override
+ public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
+ View v;
+ switch (viewType){
+ case MConstants.textW:
+ v = LayoutInflater.from(parent.getContext()).inflate(R.layout.simple_note_view, parent, false);
+ return new MyTextViewHolder(v);
+ case MConstants.listW:
+ v = LayoutInflater.from(parent.getContext()).inflate(R.layout.recycler_list_in_task_view, parent, false);
+ return new MyListViewHolder(v);
+ case MConstants.imageW:
+ v = LayoutInflater.from(parent.getContext()).inflate(R.layout.image_widget_view, parent, false);
+ return new MyImageViewHolder(v);
+ case MConstants.audioW:
+ return null;
+ default:
+ return null;
+ }
+ }
+
+ @Override
+ public void onBindViewHolder(@NonNull final RecyclerView.ViewHolder holder, final int position) {
+ int type = getItemViewType(position);
+ final Object widget = widgets.get(position).getObject();
+ if(widget!=null && type!=0){
+ switch (type){
+ case MConstants.textW:
+ final SimpleTextWidget t = (SimpleTextWidget)widget;
+ ((MyTextViewHolder)holder).head.setText(t.getHead());
+ ((MyTextViewHolder)holder).body.setText(t.getBody());
+ ((MyTextViewHolder)holder).itemView.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ taskActivityInterface.editWidget(widgets.get(holder.getAdapterPosition()));
+ }
+ });
+ break;
+ case MConstants.listW:
+ final ListWidget l = (ListWidget)widget;
+ ((MyListViewHolder)holder).head.setText(l.getHead());
+ RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(((MyListViewHolder)holder).itemView.getContext(),LinearLayoutManager.VERTICAL,false);
+ ((MyListViewHolder)holder).recyclerView.setLayoutManager(mLayoutManager);
+ ((MyListViewHolder)holder).recyclerView.setItemAnimator(new DefaultItemAnimator());
+ ((MyListViewHolder)holder).recyclerView.setNestedScrollingEnabled(false);
+ ((MyListViewHolder)holder).recyclerView
+ .setAdapter(new InViewListAdapter(new DBHelperListItems(((MyListViewHolder)holder).itemView.getContext())
+ .get3ListItemsAsList(l.getUid())));
+ ((MyListViewHolder)holder).recyclerView.setLayoutFrozen(true);
+
+ ((MyListViewHolder)holder).itemView.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ taskActivityInterface.editWidget(widgets.get(holder.getAdapterPosition()));
+ }
+ });
+ break;
+ case MConstants.imageW:
+ final ImageWidget i = (ImageWidget)widget;
+
+ Glide.with(((MyImageViewHolder)holder).imageView.getContext())
+ .load(Uri.parse(i.getImageUri()))
+ .into(((MyImageViewHolder)holder).imageView);
+ ((MyImageViewHolder)holder).itemView.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ //open it in fullscreen
+ Intent intent = new Intent(((MyImageViewHolder)holder).itemView.getContext(), ImageViewFullscreen.class);
+ intent.putExtra("image", i.getImageUri());
+ ((MyImageViewHolder)holder).itemView.getContext().startActivity(intent);
+ }
+ });
+ break;
+ case MConstants.audioW:
+ break;
+ }
+ }
+ }
+
+ @Override
+ public int getItemCount() {
+ return widgets.size();
+ }
+
+ @Override
+ public int getItemViewType(int position) {
+ return widgets.get(position).getType();
+ }
+
+
+}
diff --git a/app/src/main/java/com/pkmnapps/activitydo/adapters/ColorThemeAdapter.java b/app/src/main/java/com/pkmnapps/activitydo/adapters/ColorThemeAdapter.java
new file mode 100644
index 0000000..20f4ee5
--- /dev/null
+++ b/app/src/main/java/com/pkmnapps/activitydo/adapters/ColorThemeAdapter.java
@@ -0,0 +1,56 @@
+package com.pkmnapps.activitydo.adapters;
+
+import android.graphics.Color;
+import android.support.annotation.NonNull;
+import android.support.v7.widget.RecyclerView;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+
+import com.pkmnapps.activitydo.MConstants;
+import com.pkmnapps.activitydo.R;
+import com.pkmnapps.activitydo.custominterfaces.HomeFragInterace;
+
+public class ColorThemeAdapter extends RecyclerView.Adapter {
+
+ HomeFragInterace homeFragInterace;
+
+ public class MyViewHolder extends RecyclerView.ViewHolder {
+ public MyViewHolder(View view) {
+ super(view);
+ }
+ }
+
+ public ColorThemeAdapter(HomeFragInterace homeFragInterace) {
+ this.homeFragInterace = homeFragInterace;
+ }
+
+ @NonNull
+ @Override
+ public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
+ View itemView = LayoutInflater.from(parent.getContext())
+ .inflate(R.layout.color_circle, parent, false);
+
+ return new MyViewHolder(itemView);
+ }
+
+ @Override
+ public void onBindViewHolder(@NonNull final MyViewHolder holder, int position) {
+ holder.itemView.setBackgroundColor(Color.parseColor(MConstants.colors[holder.getAdapterPosition()]));
+ holder.itemView.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ homeFragInterace.changeColorTheme(holder.getAdapterPosition());
+ }
+ });
+ }
+
+ @Override
+ public int getItemCount() {
+ return MConstants.colors.length;
+ }
+
+
+}
+
diff --git a/app/src/main/java/com/pkmnapps/activitydo/adapters/InViewListAdapter.java b/app/src/main/java/com/pkmnapps/activitydo/adapters/InViewListAdapter.java
new file mode 100644
index 0000000..31c5a21
--- /dev/null
+++ b/app/src/main/java/com/pkmnapps/activitydo/adapters/InViewListAdapter.java
@@ -0,0 +1,59 @@
+package com.pkmnapps.activitydo.adapters;
+
+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.CheckBox;
+import android.widget.EditText;
+import android.widget.ImageButton;
+import android.widget.TextView;
+
+import com.pkmnapps.activitydo.R;
+import com.pkmnapps.activitydo.custominterfaces.ListActivityInterface;
+import com.pkmnapps.activitydo.dataclasses.ListItem;
+
+import java.util.List;
+
+public class InViewListAdapter extends RecyclerView.Adapter {
+
+ private List listItems;
+
+ public class MyViewHolder extends RecyclerView.ViewHolder {
+ public CheckBox checkBox;
+ public TextView textView;
+ public MyViewHolder(View view) {
+ super(view);
+ checkBox = (CheckBox)view.findViewById(R.id.checkBox);
+ textView = (TextView)view.findViewById(R.id.contentTextView);
+ }
+ }
+
+ public InViewListAdapter(List listItems) {
+ this.listItems = listItems;
+ }
+
+ @NonNull
+ @Override
+ public InViewListAdapter.MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
+ View itemView = LayoutInflater.from(parent.getContext())
+ .inflate(R.layout.recycler_in_view_list_view, parent, false);
+
+ return new InViewListAdapter.MyViewHolder(itemView);
+ }
+
+ @Override
+ public void onBindViewHolder(@NonNull final InViewListAdapter.MyViewHolder holder, final int position) {
+ final ListItem listItem = listItems.get(position);
+
+ holder.checkBox.setChecked(listItem.getChecked());
+ holder.textView.setText(listItem.getContent());
+ }
+
+ @Override
+ public int getItemCount() {
+ return listItems.size();
+ }
+
+}
diff --git a/app/src/main/java/com/pkmnapps/activitydo/adapters/ListAdapter.java b/app/src/main/java/com/pkmnapps/activitydo/adapters/ListAdapter.java
new file mode 100644
index 0000000..89772aa
--- /dev/null
+++ b/app/src/main/java/com/pkmnapps/activitydo/adapters/ListAdapter.java
@@ -0,0 +1,103 @@
+package com.pkmnapps.activitydo.adapters;
+
+import android.support.annotation.NonNull;
+import android.support.v7.widget.RecyclerView;
+import android.text.Editable;
+import android.text.TextWatcher;
+import android.util.Log;
+import android.view.KeyEvent;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.inputmethod.EditorInfo;
+import android.widget.Button;
+import android.widget.CheckBox;
+import android.widget.EditText;
+import android.widget.ImageButton;
+import android.widget.TextView;
+
+import com.pkmnapps.activitydo.R;
+
+import com.pkmnapps.activitydo.custominterfaces.ListActivityInterface;
+import com.pkmnapps.activitydo.databasehelpers.DBHelperList;
+import com.pkmnapps.activitydo.databasehelpers.DBHelperListItems;
+import com.pkmnapps.activitydo.dataclasses.ListItem;
+
+import java.util.List;
+
+public class ListAdapter extends RecyclerView.Adapter {
+
+ private List listItems;
+ ListActivityInterface listActivityInterface;
+
+ public class MyViewHolder extends RecyclerView.ViewHolder {
+ public EditText content;
+ public CheckBox checked;
+ public ImageButton delete;
+ public MyViewHolder(View view) {
+ super(view);
+ content = (EditText) view.findViewById(R.id.contentEditText);
+ checked = (CheckBox)view.findViewById(R.id.checkbox);
+ delete = (ImageButton)view.findViewById(R.id.deleteButton);
+ }
+ }
+
+ public ListAdapter(List listItems, ListActivityInterface listActivityInterface) {
+ this.listItems = listItems;
+ this.listActivityInterface = listActivityInterface;
+ }
+
+ @NonNull
+ @Override
+ public ListAdapter.MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
+ View itemView = LayoutInflater.from(parent.getContext())
+ .inflate(R.layout.recycler_listitem_layout, parent, false);
+
+ return new ListAdapter.MyViewHolder(itemView);
+ }
+
+ @Override
+ public void onBindViewHolder(@NonNull final ListAdapter.MyViewHolder holder, final int position) {
+ final ListItem listItem = listItems.get(position);
+
+ holder.content.setText(listItem.getContent());
+ holder.checked.setChecked(listItem.getChecked());
+ holder.checked.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ if(holder.checked.isChecked())
+ listItem.setChecked(true);
+ else
+ listItem.setChecked(false);
+ }
+ });
+ holder.delete.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ //remove from database if exists
+ new DBHelperListItems(holder.itemView.getContext()).deleteListItem(listItem.getUid());
+ listItems.remove(listItem);
+ listActivityInterface.deleteListItem(listItem);
+ notifyDataSetChanged();
+ }
+ });
+ holder.content.setOnFocusChangeListener(new View.OnFocusChangeListener() {
+ @Override
+ public void onFocusChange(View v, boolean hasFocus) {
+ if(!hasFocus) {
+ listItem.setContent(holder.content.getText().toString());
+ holder.delete.setVisibility(View.INVISIBLE);
+ }
+ else {//gained focus
+ holder.delete.setVisibility(View.VISIBLE);
+ }
+ }
+ });
+ }
+
+ @Override
+ public int getItemCount() {
+ return listItems.size();
+ }
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/pkmnapps/activitydo/contentproviders/ImageProvider.java b/app/src/main/java/com/pkmnapps/activitydo/contentproviders/ImageProvider.java
new file mode 100644
index 0000000..a7d0745
--- /dev/null
+++ b/app/src/main/java/com/pkmnapps/activitydo/contentproviders/ImageProvider.java
@@ -0,0 +1,131 @@
+package com.pkmnapps.activitydo.contentproviders;
+
+import android.content.ContentProvider;
+import android.content.ContentValues;
+import android.database.Cursor;
+import android.net.Uri;
+import android.os.ParcelFileDescriptor;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.util.HashMap;
+
+public class ImageProvider extends ContentProvider {
+
+ public static final Uri CONTENT_URI = Uri.parse("content://com.pkmnapps.activitydo/");
+
+ private static final HashMap MIME_TYPES = new HashMap();
+
+ static {
+
+ MIME_TYPES.put(".jpg", "image/jpeg");
+
+ MIME_TYPES.put(".jpeg", "image/jpeg");
+
+ }
+
+ @Override
+
+ public boolean onCreate() {
+
+ try {
+
+ File mFile = new File(getContext().getFilesDir(), "newImage.jpg");
+
+ if(!mFile.exists()) {
+
+ mFile.createNewFile();
+
+ }
+
+ getContext().getContentResolver().notifyChange(CONTENT_URI, null);
+
+ return (true);
+
+ } catch (Exception e) {
+
+ e.printStackTrace();
+
+ return false;
+
+ }
+
+ }
+
+ @Override
+
+ public String getType(Uri uri) {
+
+ String path = uri.toString();
+
+ for (String extension : MIME_TYPES.keySet()) {
+
+ if (path.endsWith(extension)) {
+
+ return (MIME_TYPES.get(extension));
+
+ }
+
+ }
+
+ return (null);
+
+ }
+
+ @Override
+
+ public ParcelFileDescriptor openFile(Uri uri, String mode)
+
+ throws FileNotFoundException {
+
+ File f = new File(getContext().getFilesDir(), "newImage.jpg");
+
+ if (f.exists()) {
+
+ return (ParcelFileDescriptor.open(f,
+
+ ParcelFileDescriptor.MODE_READ_WRITE));
+
+ }
+
+ throw new FileNotFoundException(uri.getPath());
+
+ }
+
+ @Override
+
+ public Cursor query(Uri url, String[] projection, String selection,
+
+ String[] selectionArgs, String sort) {
+
+ throw new RuntimeException("Operation not supported");
+
+ }
+
+ @Override
+
+ public Uri insert(Uri uri, ContentValues initialValues) {
+
+ throw new RuntimeException("Operation not supported");
+
+ }
+
+ @Override
+
+ public int update(Uri uri, ContentValues values, String where,
+
+ String[] whereArgs) {
+
+ throw new RuntimeException("Operation not supported");
+
+ }
+
+ @Override
+
+ public int delete(Uri uri, String where, String[] whereArgs) {
+
+ throw new RuntimeException("Operation not supported");
+
+ }
+
+}
diff --git a/app/src/main/java/com/pkmnapps/activitydo/custominterfaces/HomeFragInterace.java b/app/src/main/java/com/pkmnapps/activitydo/custominterfaces/HomeFragInterace.java
new file mode 100644
index 0000000..37609f6
--- /dev/null
+++ b/app/src/main/java/com/pkmnapps/activitydo/custominterfaces/HomeFragInterace.java
@@ -0,0 +1,11 @@
+package com.pkmnapps.activitydo.custominterfaces;
+
+import com.pkmnapps.activitydo.dataclasses.ActivityData;
+
+public interface HomeFragInterace {
+
+ void displayEditDialog(final ActivityData activityData);
+ void displayDeleteDialog(final ActivityData activityData);
+ void changeColorTheme(int pos);
+ void updatePinnedMenu();
+}
diff --git a/app/src/main/java/com/pkmnapps/activitydo/custominterfaces/ListActivityInterface.java b/app/src/main/java/com/pkmnapps/activitydo/custominterfaces/ListActivityInterface.java
new file mode 100644
index 0000000..ce41523
--- /dev/null
+++ b/app/src/main/java/com/pkmnapps/activitydo/custominterfaces/ListActivityInterface.java
@@ -0,0 +1,8 @@
+package com.pkmnapps.activitydo.custominterfaces;
+
+import com.pkmnapps.activitydo.dataclasses.ListItem;
+
+public interface ListActivityInterface {
+ void deleteListItem(ListItem listItem);
+ void newListItem();
+}
diff --git a/app/src/main/java/com/pkmnapps/activitydo/custominterfaces/TaskActivityInterface.java b/app/src/main/java/com/pkmnapps/activitydo/custominterfaces/TaskActivityInterface.java
new file mode 100644
index 0000000..c73be00
--- /dev/null
+++ b/app/src/main/java/com/pkmnapps/activitydo/custominterfaces/TaskActivityInterface.java
@@ -0,0 +1,9 @@
+package com.pkmnapps.activitydo.custominterfaces;
+
+import com.pkmnapps.activitydo.dataclasses.Widget;
+
+public interface TaskActivityInterface {
+
+ void editWidget(Widget widget);
+ void deleteWidget(Widget widget);
+}
diff --git a/app/src/main/java/com/pkmnapps/activitydo/databasehelpers/DBHelper.java b/app/src/main/java/com/pkmnapps/activitydo/databasehelpers/DBHelper.java
new file mode 100644
index 0000000..4557e12
--- /dev/null
+++ b/app/src/main/java/com/pkmnapps/activitydo/databasehelpers/DBHelper.java
@@ -0,0 +1,152 @@
+package com.pkmnapps.activitydo.databasehelpers;
+
+import android.content.ContentValues;
+import android.content.Context;
+import android.database.Cursor;
+import android.database.sqlite.SQLiteDatabase;
+import android.database.sqlite.SQLiteOpenHelper;
+
+import com.pkmnapps.activitydo.dataclasses.ActivityData;
+import com.pkmnapps.activitydo.dataclasses.ListWidget;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class DBHelper extends SQLiteOpenHelper {
+ public static final String DATABASE_NAME = "activity.db";
+
+
+ public static final String HOME_TABLE_NAME = "home";
+
+ public static final String HOME_COLUMN_ID = "id";
+ public static final String HOME_COLUMN_NAME = "name";
+ public static final String HOME_COLUMN_COLOR = "color";
+ public static final String HOME_COLUMN_PINNED = "pinned";
+ public static final String HOME_COLUMN_SORT = "sort";
+ Context context;
+ public DBHelper(Context context) {
+ super(context, DATABASE_NAME , null, 1);
+ this.context = context;
+ }
+
+ @Override
+ public void onCreate(SQLiteDatabase db) {
+ // TODO Auto-generated method stub
+ db.execSQL(
+ "create table "+HOME_TABLE_NAME +
+ " (id integer primary key, name text, color text, pinned integer, sort integer) "
+ );
+ }
+ @Override
+ public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
+ // TODO Auto-generated method stub
+ db.execSQL("DROP TABLE IF EXISTS pinnedevents");
+ onCreate(db);
+ }
+
+ public boolean insertActivity (String id, String name, String descp, String color, String image, int pinned, int sort) {
+ SQLiteDatabase db = this.getWritableDatabase();
+ ContentValues contentValues = new ContentValues();
+ contentValues.put(HOME_COLUMN_ID, id);
+ contentValues.put(HOME_COLUMN_NAME, name);
+ contentValues.put(HOME_COLUMN_COLOR, color);
+ contentValues.put(HOME_COLUMN_PINNED, pinned);
+ contentValues.put(HOME_COLUMN_SORT, sort);
+ db.insert(HOME_TABLE_NAME, null, contentValues);
+ return true;
+ }
+ public boolean insertActivity (ActivityData activityData) {
+ SQLiteDatabase db = this.getWritableDatabase();
+ ContentValues contentValues = new ContentValues();
+ contentValues.put(HOME_COLUMN_ID, activityData.getId());
+ contentValues.put(HOME_COLUMN_NAME, activityData.getName());
+ contentValues.put(HOME_COLUMN_COLOR, activityData.getColor());
+ contentValues.put(HOME_COLUMN_PINNED, activityData.getPinned());
+ contentValues.put(HOME_COLUMN_SORT, activityData.getSortOrder());
+ db.insert(HOME_TABLE_NAME, null, contentValues);
+ return true;
+ }
+
+ public int deleteActivity(String id){
+ //delete stuff from all databases
+ new DBHelperText(context).deleteAllTexts(id);
+ new DBHelperImage(context).deleteAllImages(id);//also deletes files in storage
+ new DBHelperList(context).deleteAllLists(id);//also deletes from list-items database
+
+ SQLiteDatabase db = this.getWritableDatabase();
+ return db.delete(HOME_TABLE_NAME,
+ "id = ? ",
+ new String[] { id });
+ }
+ public List getAllActivitiesAsList(){
+ List activityDataList = new ArrayList<>();
+
+ SQLiteDatabase db = this.getReadableDatabase();
+ Cursor res = db.rawQuery( "select * from "+HOME_TABLE_NAME, null );
+ res.moveToFirst();
+
+ ActivityData a;
+ while(!res.isAfterLast()){
+ int sort = res.getInt(res.getColumnIndex(HOME_COLUMN_SORT));
+ a = new ActivityData(res.getString(res.getColumnIndex(HOME_COLUMN_ID)),
+ res.getString(res.getColumnIndex(HOME_COLUMN_NAME)),
+ res.getString(res.getColumnIndex(HOME_COLUMN_COLOR)),
+ res.getInt(res.getColumnIndex(HOME_COLUMN_PINNED)) == 1,
+ sort);
+ activityDataList.add(0,a);
+ res.moveToNext();
+ }
+ //sorting this list
+ Boolean swap;
+ for(int i=0;iactivityDataList.get(j+1).getSortOrder()){
+ swap = true;
+ ActivityData temp = activityDataList.get(j);
+ activityDataList.set(j,activityDataList.get(j+1));
+ activityDataList.set(j+1,temp);
+ }
+ }
+ if(!swap)
+ break;
+ }
+ res.close();
+ return activityDataList;
+ }
+ public void pinActivity(String id,int bool1or0){
+ SQLiteDatabase db = this.getWritableDatabase();
+ ContentValues contentValues = new ContentValues();
+ contentValues.put("pinned",bool1or0);
+ db.update(HOME_TABLE_NAME,contentValues,"id = ?",new String[]{id});
+ }
+ public void updateActivity(String id ,String name, String descp, String color, String image, int pinned){
+ SQLiteDatabase db = this.getWritableDatabase();
+ ContentValues contentValues = new ContentValues();
+ contentValues.put(HOME_COLUMN_NAME, name);
+ contentValues.put(HOME_COLUMN_COLOR, color);
+ contentValues.put(HOME_COLUMN_PINNED, pinned);
+ db.update(HOME_TABLE_NAME,contentValues,"id = ?", new String[]{id});
+ }
+ public void updateActivity(ActivityData activityData){
+ SQLiteDatabase db = this.getWritableDatabase();
+ ContentValues contentValues = new ContentValues();
+ contentValues.put(HOME_COLUMN_NAME, activityData.getName());
+ contentValues.put(HOME_COLUMN_COLOR, activityData.getColor());
+ contentValues.put(HOME_COLUMN_PINNED, activityData.getPinned());
+ db.update(HOME_TABLE_NAME,contentValues,"id = ?", new String[]{activityData.getId()});
+ }
+ public void updateSort(String id, int sort){
+ SQLiteDatabase db = this.getWritableDatabase();
+ ContentValues contentValues = new ContentValues();
+ contentValues.put(HOME_COLUMN_SORT, sort);
+ db.update(HOME_TABLE_NAME,contentValues,"id = ?", new String[]{id});
+ }
+ public void updateAllSortOrders(List activityDataList){
+ SQLiteDatabase db = this.getWritableDatabase();
+ for(ActivityData a:activityDataList){
+ updateSort(a.getId(),activityDataList.indexOf(a));
+ }
+ }
+
+}
diff --git a/app/src/main/java/com/pkmnapps/activitydo/databasehelpers/DBHelperImage.java b/app/src/main/java/com/pkmnapps/activitydo/databasehelpers/DBHelperImage.java
new file mode 100644
index 0000000..6129fec
--- /dev/null
+++ b/app/src/main/java/com/pkmnapps/activitydo/databasehelpers/DBHelperImage.java
@@ -0,0 +1,116 @@
+package com.pkmnapps.activitydo.databasehelpers;
+
+import android.content.ContentValues;
+import android.content.Context;
+import android.database.Cursor;
+import android.database.sqlite.SQLiteDatabase;
+import android.database.sqlite.SQLiteOpenHelper;
+import android.net.Uri;
+import android.os.Environment;
+
+import com.bumptech.glide.Glide;
+import com.pkmnapps.activitydo.TaskActivity;
+import com.pkmnapps.activitydo.dataclasses.ImageWidget;
+import com.pkmnapps.activitydo.dataclasses.SimpleTextWidget;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.util.ArrayList;
+import java.util.List;
+
+public class DBHelperImage extends SQLiteOpenHelper {
+ public static final String DATABASE_NAME = "image.db";
+
+ public static final String HOME_TABLE_NAME = "image";
+
+ public static final String HOME_COLUMN_ID = "id";
+ public static final String HOME_COLUMN_AID = "aid";//activityid
+ public static final String HOME_COLUMN_UID = "uid";//uniqueid
+ public static final String HOME_COLUMN_URI = "uri";
+ Context context;
+ public DBHelperImage(Context context) {
+ super(context, DATABASE_NAME , null, 1);
+ this.context = context;
+ }
+
+ @Override
+ public void onCreate(SQLiteDatabase db) {
+ // TODO Auto-generated method stub
+ db.execSQL(
+ "create table "+HOME_TABLE_NAME +
+ " (id integer primary key, aid text, uid text, uri text) "
+ );
+ }
+ @Override
+ public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
+ // TODO Auto-generated method stub
+ db.execSQL("DROP TABLE IF EXISTS image");
+ onCreate(db);
+ }
+
+ public boolean insertImage (String uid, String aid, String uri) {
+ insertWidgetForSort(uid);
+ SQLiteDatabase db = this.getWritableDatabase();
+ ContentValues contentValues = new ContentValues();
+ contentValues.put(HOME_COLUMN_AID, aid);
+ contentValues.put(HOME_COLUMN_UID, uid);
+ contentValues.put(HOME_COLUMN_URI, uri);
+ db.insert(HOME_TABLE_NAME, null, contentValues);
+ return true;
+ }
+ public boolean insertImage (ImageWidget imageWidget) {
+ insertWidgetForSort(imageWidget.getUid());
+ SQLiteDatabase db = this.getWritableDatabase();
+ ContentValues contentValues = new ContentValues();
+ contentValues.put(HOME_COLUMN_AID, imageWidget.getAid());
+ contentValues.put(HOME_COLUMN_UID, imageWidget.getUid());
+ contentValues.put(HOME_COLUMN_URI, imageWidget.getImageUri());
+ db.insert(HOME_TABLE_NAME, null, contentValues);
+ return true;
+ }
+
+ public int deleteImage(String uid){
+ deleteWidgetinSort(uid);
+ File file = new File(context.getExternalFilesDir(Environment.DIRECTORY_PICTURES),(uid+".jpg"));
+ if(file.exists())
+ file.delete();
+ SQLiteDatabase db = this.getWritableDatabase();
+ return db.delete(HOME_TABLE_NAME,
+ "uid = ? ",
+ new String[] { uid });
+ }
+
+ public void deleteAllImages(String aid){
+ for (ImageWidget i:getAllImagesAsList(aid)){
+ deleteImage(i.getUid());
+ }
+ }
+
+ public List getAllImagesAsList(String aid){
+ List imageWidgets = new ArrayList<>();
+
+ SQLiteDatabase db = this.getReadableDatabase();
+ Cursor res = db.rawQuery( "select * from "+HOME_TABLE_NAME +" where aid=?", new String[]{aid});
+ res.moveToFirst();
+
+ ImageWidget a;
+ while(!res.isAfterLast()){
+ a = new ImageWidget(res.getString(res.getColumnIndex(HOME_COLUMN_UID)),
+ res.getString(res.getColumnIndex(HOME_COLUMN_AID)),
+ res.getString(res.getColumnIndex(HOME_COLUMN_URI)));
+
+ imageWidgets.add(a);
+ res.moveToNext();
+ }
+ res.close();
+ return imageWidgets;
+ }
+
+ private void insertWidgetForSort(String uid){//call this in every insert method
+ new DBHelperWidgets(context).insertWidget(uid,0);
+ }
+ private void deleteWidgetinSort(String uid){//call this in every delete method
+ new DBHelperWidgets(context).deleteWidget(uid);
+ }
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/pkmnapps/activitydo/databasehelpers/DBHelperList.java b/app/src/main/java/com/pkmnapps/activitydo/databasehelpers/DBHelperList.java
new file mode 100644
index 0000000..6a3515d
--- /dev/null
+++ b/app/src/main/java/com/pkmnapps/activitydo/databasehelpers/DBHelperList.java
@@ -0,0 +1,133 @@
+package com.pkmnapps.activitydo.databasehelpers;
+
+import android.content.ContentValues;
+import android.content.Context;
+import android.database.Cursor;
+import android.database.sqlite.SQLiteDatabase;
+import android.database.sqlite.SQLiteOpenHelper;
+import android.util.Log;
+
+import com.pkmnapps.activitydo.dataclasses.ListWidget;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class DBHelperList extends SQLiteOpenHelper {
+ public static final String DATABASE_NAME = "list.db";
+
+ public static final String HOME_TABLE_NAME = "list";
+
+ public static final String HOME_COLUMN_ID = "id";
+ public static final String HOME_COLUMN_AID = "aid";//activityid
+ public static final String HOME_COLUMN_UID = "uid";//uniqueid
+ public static final String HOME_COLUMN_HEAD = "head";
+
+ Context context;
+
+ public DBHelperList(Context context) {
+ super(context, DATABASE_NAME , null, 1);
+ this.context = context;
+ }
+
+ @Override
+ public void onCreate(SQLiteDatabase db) {
+ // TODO Auto-generated method stub
+ db.execSQL(
+ "create table "+HOME_TABLE_NAME +
+ " (id integer primary key, aid text, uid text, head text) "
+ );
+ }
+ @Override
+ public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
+ // TODO Auto-generated method stub
+ db.execSQL("DROP TABLE IF EXISTS list");
+ onCreate(db);
+ }
+
+ public boolean insertList (String uid, String aid, String head) {
+ insertWidgetForSort(uid);
+ SQLiteDatabase db = this.getWritableDatabase();
+ ContentValues contentValues = new ContentValues();
+ contentValues.put(HOME_COLUMN_AID, aid);
+ contentValues.put(HOME_COLUMN_UID, uid);
+ contentValues.put(HOME_COLUMN_HEAD, head);
+ db.insert(HOME_TABLE_NAME, null, contentValues);
+ return true;
+ }
+ public boolean insertList (ListWidget listWidget) {
+ insertWidgetForSort(listWidget.getUid());
+ SQLiteDatabase db = this.getWritableDatabase();
+ ContentValues contentValues = new ContentValues();
+ contentValues.put(HOME_COLUMN_AID, listWidget.getAid());
+ contentValues.put(HOME_COLUMN_UID, listWidget.getUid());
+ contentValues.put(HOME_COLUMN_HEAD, listWidget.getHead());
+ db.insert(HOME_TABLE_NAME, null, contentValues);
+ return true;
+ }
+
+ public int deleteList(String uid){
+ deleteWidgetinSort(uid);
+ //also delete from second database
+ new DBHelperListItems(context).deleteAllListItem(uid);
+ SQLiteDatabase db = this.getWritableDatabase();
+ return db.delete(HOME_TABLE_NAME,
+ "uid = ? ",
+ new String[] { uid });
+ }
+ public void deleteAllLists(String aid){
+ for(ListWidget l:getAllListAsList(aid)){
+ deleteList(l.getUid());
+ }
+ }
+
+ public ListWidget getListWidget(String lid){
+ ListWidget listWidget;
+ SQLiteDatabase db = this.getReadableDatabase();
+ Cursor res = db.rawQuery( "select * from "+HOME_TABLE_NAME +" where uid=?", new String[]{lid});
+ res.moveToFirst();
+ listWidget = new ListWidget(res.getString(res.getColumnIndex(HOME_COLUMN_UID)),
+ res.getString(res.getColumnIndex(HOME_COLUMN_AID)),
+ res.getString(res.getColumnIndex(HOME_COLUMN_HEAD)));
+ res.close();
+ return listWidget;
+ }
+
+ public List getAllListAsList(String aid){
+ List listWidgets = new ArrayList<>();
+
+ SQLiteDatabase db = this.getReadableDatabase();
+ Cursor res = db.rawQuery( "select * from "+HOME_TABLE_NAME +" where aid=?", new String[]{aid});
+ res.moveToFirst();
+
+ ListWidget a;
+ while(!res.isAfterLast()){
+ a = new ListWidget(res.getString(res.getColumnIndex(HOME_COLUMN_UID)),
+ res.getString(res.getColumnIndex(HOME_COLUMN_AID)),
+ res.getString(res.getColumnIndex(HOME_COLUMN_HEAD)));
+ listWidgets.add(a);
+ res.moveToNext();
+ }
+ res.close();
+ return listWidgets;
+ }
+
+ public void updateActivity(ListWidget listWidget){
+ SQLiteDatabase db = this.getWritableDatabase();
+ ContentValues contentValues = new ContentValues();
+ contentValues.put(HOME_COLUMN_HEAD, listWidget.getHead());
+ db.update(HOME_TABLE_NAME,contentValues,"uid = ?", new String[]{listWidget.getUid()});
+ }
+ public void updateHead(String lid, String head){
+ SQLiteDatabase db = this.getWritableDatabase();
+ ContentValues contentValues = new ContentValues();
+ contentValues.put(HOME_COLUMN_HEAD, head);
+ db.update(HOME_TABLE_NAME,contentValues,"uid = ?", new String[]{lid});
+ }
+
+ private void insertWidgetForSort(String uid){//call this in every insert method
+ new DBHelperWidgets(context).insertWidget(uid,0);
+ }
+ private void deleteWidgetinSort(String uid){//call this in every delete method
+ new DBHelperWidgets(context).deleteWidget(uid);
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/pkmnapps/activitydo/databasehelpers/DBHelperListItems.java b/app/src/main/java/com/pkmnapps/activitydo/databasehelpers/DBHelperListItems.java
new file mode 100644
index 0000000..275eb33
--- /dev/null
+++ b/app/src/main/java/com/pkmnapps/activitydo/databasehelpers/DBHelperListItems.java
@@ -0,0 +1,126 @@
+package com.pkmnapps.activitydo.databasehelpers;
+
+import android.content.ContentValues;
+import android.content.Context;
+import android.database.Cursor;
+import android.database.sqlite.SQLiteDatabase;
+import android.database.sqlite.SQLiteOpenHelper;
+
+import com.pkmnapps.activitydo.dataclasses.ListItem;
+import com.pkmnapps.activitydo.dataclasses.ListWidget;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class DBHelperListItems extends SQLiteOpenHelper {
+ public static final String DATABASE_NAME = "listitem.db";
+
+ public static final String HOME_TABLE_NAME = "listitem";
+
+ public static final String HOME_COLUMN_ID = "id";
+ public static final String HOME_COLUMN_UID = "uid";//uniqueid
+ public static final String HOME_COLUMN_LID = "lid";//listId
+ public static final String HOME_COLUMN_AID = "aid";//activityid
+ public static final String HOME_COLUMN_CONTENT = "content";
+ public static final String HOME_COLUMN_CHECK = "checker";
+
+ public DBHelperListItems(Context context) {
+ super(context, DATABASE_NAME , null, 1);
+ }
+
+ @Override
+ public void onCreate(SQLiteDatabase db) {
+ // TODO Auto-generated method stub
+ db.execSQL(
+ "create table "+HOME_TABLE_NAME +
+ " (id integer primary key, uid text, lid text, content text, checker integer) "
+ );
+ }
+ @Override
+ public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
+ // TODO Auto-generated method stub
+ db.execSQL("DROP TABLE IF EXISTS listitem");
+ onCreate(db);
+ }
+
+ public boolean insertListItem (String uid, String lid, String content, Boolean check) {
+ SQLiteDatabase db = this.getWritableDatabase();
+ ContentValues contentValues = new ContentValues();
+ contentValues.put(HOME_COLUMN_UID, uid);
+ contentValues.put(HOME_COLUMN_LID, lid);
+ contentValues.put(HOME_COLUMN_CONTENT, content);
+ contentValues.put(HOME_COLUMN_CHECK, check?1:0);
+ db.insert(HOME_TABLE_NAME, null, contentValues);
+ return true;
+ }
+ public boolean insertListItem (ListItem listItem) {
+ SQLiteDatabase db = this.getWritableDatabase();
+ ContentValues contentValues = new ContentValues();
+ contentValues.put(HOME_COLUMN_UID, listItem.getUid());
+ contentValues.put(HOME_COLUMN_LID, listItem.getLid());
+ contentValues.put(HOME_COLUMN_CONTENT, listItem.getContent());
+ contentValues.put(HOME_COLUMN_CHECK, listItem.getChecked()?1:0);
+ db.insert(HOME_TABLE_NAME, null, contentValues);
+ return true;
+ }
+
+ public int deleteListItem(String uid){
+ SQLiteDatabase db = this.getWritableDatabase();
+ return db.delete(HOME_TABLE_NAME,
+ "uid = ? ",
+ new String[] { uid });
+ }
+ public int deleteAllListItem(String lid){
+ SQLiteDatabase db = this.getWritableDatabase();
+ return db.delete(HOME_TABLE_NAME,
+ "lid = ? ",
+ new String[] { lid });
+ }
+
+ public List getAllListItemsAsList(String lid){
+ List listItems = new ArrayList<>();
+
+ SQLiteDatabase db = this.getReadableDatabase();
+ Cursor res = db.rawQuery( "select * from "+HOME_TABLE_NAME +" where lid=?", new String[]{lid});
+ res.moveToFirst();
+
+ ListItem a;
+ while(!res.isAfterLast()){
+ a = new ListItem(res.getString(res.getColumnIndex(HOME_COLUMN_UID)),
+ res.getString(res.getColumnIndex(HOME_COLUMN_LID)),
+ res.getString(res.getColumnIndex(HOME_COLUMN_CONTENT)),
+ res.getInt(res.getColumnIndex(HOME_COLUMN_CHECK)) == 1);
+ listItems.add(a);
+ res.moveToNext();
+ }
+ res.close();
+ return listItems;
+ }
+ public List get3ListItemsAsList(String lid){
+ List listItems = new ArrayList<>();
+
+ SQLiteDatabase db = this.getReadableDatabase();
+ Cursor res = db.rawQuery( "select * from "+HOME_TABLE_NAME +" where lid=? LIMIT 3", new String[]{lid});
+ res.moveToFirst();
+
+ ListItem a;
+ while(!res.isAfterLast()){
+ a = new ListItem(res.getString(res.getColumnIndex(HOME_COLUMN_UID)),
+ res.getString(res.getColumnIndex(HOME_COLUMN_LID)),
+ res.getString(res.getColumnIndex(HOME_COLUMN_CONTENT)),
+ res.getInt(res.getColumnIndex(HOME_COLUMN_CHECK)) == 1);
+ listItems.add(a);
+ res.moveToNext();
+ }
+ res.close();
+ return listItems;
+ }
+
+ public int updateActivity(ListItem listItem){
+ SQLiteDatabase db = this.getWritableDatabase();
+ ContentValues contentValues = new ContentValues();
+ contentValues.put(HOME_COLUMN_CHECK, listItem.getChecked()?1:0);
+ contentValues.put(HOME_COLUMN_CONTENT, listItem.getContent());
+ return db.update(HOME_TABLE_NAME,contentValues,"uid = ?", new String[]{listItem.getUid()});
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/pkmnapps/activitydo/databasehelpers/DBHelperText.java b/app/src/main/java/com/pkmnapps/activitydo/databasehelpers/DBHelperText.java
new file mode 100644
index 0000000..2810f56
--- /dev/null
+++ b/app/src/main/java/com/pkmnapps/activitydo/databasehelpers/DBHelperText.java
@@ -0,0 +1,136 @@
+package com.pkmnapps.activitydo.databasehelpers;
+
+import android.content.ContentValues;
+import android.content.Context;
+import android.database.Cursor;
+import android.database.sqlite.SQLiteDatabase;
+import android.database.sqlite.SQLiteOpenHelper;
+
+import com.pkmnapps.activitydo.dataclasses.SimpleTextWidget;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class DBHelperText extends SQLiteOpenHelper{
+ public static final String DATABASE_NAME = "text.db";
+
+ public static final String HOME_TABLE_NAME = "text";
+
+ public static final String HOME_COLUMN_ID = "id";
+ public static final String HOME_COLUMN_AID = "aid";//activityid
+ public static final String HOME_COLUMN_UID = "uid";//uniqueid
+ public static final String HOME_COLUMN_HEAD = "head";
+ public static final String HOME_COLUMN_BODY = "body";
+
+ Context context;
+ public DBHelperText(Context context) {
+ super(context, DATABASE_NAME , null, 1);
+ this.context = context;
+ }
+
+ @Override
+ public void onCreate(SQLiteDatabase db) {
+ // TODO Auto-generated method stub
+ db.execSQL(
+ "create table "+HOME_TABLE_NAME +
+ " (id integer primary key, aid text, uid text, head text, body text) "
+ );
+ }
+ @Override
+ public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
+ // TODO Auto-generated method stub
+ db.execSQL("DROP TABLE IF EXISTS text");
+ onCreate(db);
+ }
+
+ public boolean insertText (String uid, String aid, String head, String body) {
+ insertWidgetForSort(uid);
+ SQLiteDatabase db = this.getWritableDatabase();
+ ContentValues contentValues = new ContentValues();
+ contentValues.put(HOME_COLUMN_AID, aid);
+ contentValues.put(HOME_COLUMN_UID, uid);
+ contentValues.put(HOME_COLUMN_HEAD, head);
+ contentValues.put(HOME_COLUMN_BODY, body);
+ db.insert(HOME_TABLE_NAME, null, contentValues);
+ return true;
+ }
+ public boolean insertText (SimpleTextWidget simpleTextWidget) {
+ insertWidgetForSort(simpleTextWidget.getUid());
+ SQLiteDatabase db = this.getWritableDatabase();
+ ContentValues contentValues = new ContentValues();
+ contentValues.put(HOME_COLUMN_AID, simpleTextWidget.getAid());
+ contentValues.put(HOME_COLUMN_UID, simpleTextWidget.getUid());
+ contentValues.put(HOME_COLUMN_HEAD, simpleTextWidget.getHead());
+ contentValues.put(HOME_COLUMN_BODY, simpleTextWidget.getBody());
+ db.insert(HOME_TABLE_NAME, null, contentValues);
+ return true;
+ }
+
+ public int deleteText(String uid){
+ deleteWidgetinSort(uid);
+ SQLiteDatabase db = this.getWritableDatabase();
+ return db.delete(HOME_TABLE_NAME,
+ "uid = ? ",
+ new String[] { uid });
+ }
+ public int deleteAllTexts(String aid){
+ SQLiteDatabase db = this.getWritableDatabase();
+ return db.delete(HOME_TABLE_NAME,
+ "aid = ? ",
+ new String[] { aid });
+ }
+ public SimpleTextWidget getTextWidget(String uid){
+ SimpleTextWidget s;
+ SQLiteDatabase db = this.getReadableDatabase();
+ Cursor res = db.rawQuery( "select * from "+HOME_TABLE_NAME +" where uid=?", new String[]{uid});
+ res.moveToFirst();
+ s = new SimpleTextWidget(res.getString(res.getColumnIndex(HOME_COLUMN_UID)),
+ res.getString(res.getColumnIndex(HOME_COLUMN_AID)),
+ res.getString(res.getColumnIndex(HOME_COLUMN_HEAD)),
+ res.getString(res.getColumnIndex(HOME_COLUMN_BODY)));
+ res.close();
+ return s;
+ }
+
+ public List getAllTextsAsList(String aid){
+ List simpleTextWidgets = new ArrayList<>();
+
+ SQLiteDatabase db = this.getReadableDatabase();
+ Cursor res = db.rawQuery( "select * from "+HOME_TABLE_NAME +" where aid=?", new String[]{aid});
+ res.moveToFirst();
+
+ SimpleTextWidget a;
+ while(!res.isAfterLast()){
+ a = new SimpleTextWidget(res.getString(res.getColumnIndex(HOME_COLUMN_UID)),
+ res.getString(res.getColumnIndex(HOME_COLUMN_AID)),
+ res.getString(res.getColumnIndex(HOME_COLUMN_HEAD)),
+ res.getString(res.getColumnIndex(HOME_COLUMN_BODY)));
+ simpleTextWidgets.add(a);
+ res.moveToNext();
+ }
+ res.close();
+ return simpleTextWidgets;
+ }
+
+ public void updateActivity(SimpleTextWidget simpleTextWidget){
+ SQLiteDatabase db = this.getWritableDatabase();
+ ContentValues contentValues = new ContentValues();
+ contentValues.put(HOME_COLUMN_HEAD, simpleTextWidget.getHead());
+ contentValues.put(HOME_COLUMN_BODY, simpleTextWidget.getBody());
+ db.update(HOME_TABLE_NAME,contentValues,"uid = ?", new String[]{simpleTextWidget.getUid()});
+ }
+ public void updateHeadBody(String uid, String head, String body){
+ SQLiteDatabase db = this.getWritableDatabase();
+ ContentValues contentValues = new ContentValues();
+ contentValues.put(HOME_COLUMN_HEAD, head);
+ contentValues.put(HOME_COLUMN_BODY, body);
+ db.update(HOME_TABLE_NAME,contentValues,"uid = ?", new String[]{uid});
+ }
+
+ private void insertWidgetForSort(String uid){//call this in every insert method
+ new DBHelperWidgets(context).insertWidget(uid,0);
+ }
+ private void deleteWidgetinSort(String uid){//call this in every delete method
+ new DBHelperWidgets(context).deleteWidget(uid);
+ }
+}
diff --git a/app/src/main/java/com/pkmnapps/activitydo/databasehelpers/DBHelperWidgets.java b/app/src/main/java/com/pkmnapps/activitydo/databasehelpers/DBHelperWidgets.java
new file mode 100644
index 0000000..53c4f05
--- /dev/null
+++ b/app/src/main/java/com/pkmnapps/activitydo/databasehelpers/DBHelperWidgets.java
@@ -0,0 +1,80 @@
+package com.pkmnapps.activitydo.databasehelpers;
+
+import android.content.ContentValues;
+import android.content.Context;
+import android.database.Cursor;
+import android.database.sqlite.SQLiteDatabase;
+import android.database.sqlite.SQLiteOpenHelper;
+
+import com.pkmnapps.activitydo.dataclasses.Widget;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class DBHelperWidgets extends SQLiteOpenHelper {
+ public static final String DATABASE_NAME = "widget.db";
+
+ public static final String HOME_TABLE_NAME = "widget";
+
+ public static final String HOME_COLUMN_ID = "id";
+ public static final String HOME_COLUMN_UID = "uid";//uniqueid
+ public static final String HOME_COLUMN_SORT = "sort";//order
+ Context context;
+ public DBHelperWidgets(Context context) {
+ super(context, DATABASE_NAME , null, 1);
+ this.context = context;
+ }
+
+ @Override
+ public void onCreate(SQLiteDatabase db) {
+ // TODO Auto-generated method stub
+ db.execSQL(
+ "create table "+HOME_TABLE_NAME +
+ " (id integer primary key, aid text, uid text, sort integer) "
+ );
+ }
+ @Override
+ public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
+ // TODO Auto-generated method stub
+ db.execSQL("DROP TABLE IF EXISTS widget");
+ onCreate(db);
+ }
+
+ public boolean insertWidget (String uid, int sortOrder) {
+ SQLiteDatabase db = this.getWritableDatabase();
+ ContentValues contentValues = new ContentValues();
+ contentValues.put(HOME_COLUMN_UID, uid);
+ contentValues.put(HOME_COLUMN_SORT, sortOrder);
+ db.insert(HOME_TABLE_NAME, null, contentValues);
+ return true;
+ }
+ public int getSortValue(String uid){
+ int sort;
+ SQLiteDatabase db = this.getReadableDatabase();
+ Cursor res = db.rawQuery( "select * from "+HOME_TABLE_NAME +" where uid=?", new String[]{uid});
+ res.moveToFirst();
+ sort = res.getInt(res.getColumnIndex(HOME_COLUMN_SORT));
+ res.close();
+ return sort;
+ }
+ private void updateSort(String uid,int sortOrder){
+ SQLiteDatabase db = this.getWritableDatabase();
+ ContentValues contentValues = new ContentValues();
+ contentValues.put(HOME_COLUMN_SORT, sortOrder);
+ db.update(HOME_TABLE_NAME,contentValues,"uid = ?", new String[]{uid});
+ }
+
+ public int deleteWidget(String uid){//call from all databases when deleting something
+ SQLiteDatabase db = this.getWritableDatabase();
+ return db.delete(HOME_TABLE_NAME,
+ "uid = ? ",
+ new String[] { uid });
+ }
+ public void updateAllWidgetSortOrders(List widgets){//call when deleting and when adding new widgets
+ SQLiteDatabase db = this.getWritableDatabase();
+ for(Widget a:widgets){
+ updateSort(a.getUid(),widgets.indexOf(a));
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/pkmnapps/activitydo/dataclasses/ActivityData.java b/app/src/main/java/com/pkmnapps/activitydo/dataclasses/ActivityData.java
new file mode 100644
index 0000000..3cbcf53
--- /dev/null
+++ b/app/src/main/java/com/pkmnapps/activitydo/dataclasses/ActivityData.java
@@ -0,0 +1,71 @@
+package com.pkmnapps.activitydo.dataclasses;
+
+import android.graphics.Bitmap;
+import android.graphics.Color;
+
+import java.util.Date;
+
+public class ActivityData {
+ private String name,id;
+ private String color;
+ private Boolean pinned;
+ private int sortOrder;
+
+ public ActivityData() {
+ }
+
+ public ActivityData(String id, String name, String color) {
+ this.name = name;
+ this.id = id;
+ this.color = color;
+ this.pinned = false;
+ }
+
+ public ActivityData(String id, String name, String color, Boolean pinned, int sortOrder ) {
+ this.name = name;
+ this.id = id;
+ this.color = color;
+ this.pinned = pinned;
+ this.sortOrder = sortOrder;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getColor() {
+ return color;
+ }
+
+ public void setColor(String color) {
+ this.color = color;
+ }
+
+ public Boolean getPinned() {
+ return pinned;
+ }
+
+ public void setPinned(Boolean pinned) {
+ this.pinned = pinned;
+ }
+
+ public int getSortOrder() {
+ return sortOrder;
+ }
+
+ public void setSortOrder(int sortOrder) {
+ this.sortOrder = sortOrder;
+ }
+}
diff --git a/app/src/main/java/com/pkmnapps/activitydo/dataclasses/AudioWidget.java b/app/src/main/java/com/pkmnapps/activitydo/dataclasses/AudioWidget.java
new file mode 100644
index 0000000..b2894c7
--- /dev/null
+++ b/app/src/main/java/com/pkmnapps/activitydo/dataclasses/AudioWidget.java
@@ -0,0 +1,21 @@
+package com.pkmnapps.activitydo.dataclasses;
+
+public class AudioWidget {
+ String uid,aid;
+
+ public String getUid() {
+ return uid;
+ }
+
+ public void setUid(String uid) {
+ this.uid = uid;
+ }
+
+ public String getAid() {
+ return aid;
+ }
+
+ public void setAid(String aid) {
+ this.aid = aid;
+ }
+}
diff --git a/app/src/main/java/com/pkmnapps/activitydo/dataclasses/DateWidget.java b/app/src/main/java/com/pkmnapps/activitydo/dataclasses/DateWidget.java
new file mode 100644
index 0000000..cbc4365
--- /dev/null
+++ b/app/src/main/java/com/pkmnapps/activitydo/dataclasses/DateWidget.java
@@ -0,0 +1,21 @@
+package com.pkmnapps.activitydo.dataclasses;
+
+public class DateWidget {
+ String uid,aid;
+
+ public String getUid() {
+ return uid;
+ }
+
+ public void setUid(String uid) {
+ this.uid = uid;
+ }
+
+ public String getAid() {
+ return aid;
+ }
+
+ public void setAid(String aid) {
+ this.aid = aid;
+ }
+}
diff --git a/app/src/main/java/com/pkmnapps/activitydo/dataclasses/ImageWidget.java b/app/src/main/java/com/pkmnapps/activitydo/dataclasses/ImageWidget.java
new file mode 100644
index 0000000..25fbe36
--- /dev/null
+++ b/app/src/main/java/com/pkmnapps/activitydo/dataclasses/ImageWidget.java
@@ -0,0 +1,37 @@
+package com.pkmnapps.activitydo.dataclasses;
+
+public class ImageWidget {
+ String uid,aid;
+ String imageUri;
+
+
+ public ImageWidget(String uid, String aid, String imageUri) {
+ this.uid = uid;
+ this.aid = aid;
+ this.imageUri = imageUri;
+ }
+
+ public String getImageUri() {
+ return imageUri;
+ }
+
+ public void setImageUri(String imageUri) {
+ this.imageUri = imageUri;
+ }
+
+ public String getUid() {
+ return uid;
+ }
+
+ public void setUid(String uid) {
+ this.uid = uid;
+ }
+
+ public String getAid() {
+ return aid;
+ }
+
+ public void setAid(String aid) {
+ this.aid = aid;
+ }
+}
diff --git a/app/src/main/java/com/pkmnapps/activitydo/dataclasses/ListItem.java b/app/src/main/java/com/pkmnapps/activitydo/dataclasses/ListItem.java
new file mode 100644
index 0000000..e570cbf
--- /dev/null
+++ b/app/src/main/java/com/pkmnapps/activitydo/dataclasses/ListItem.java
@@ -0,0 +1,45 @@
+package com.pkmnapps.activitydo.dataclasses;
+
+public class ListItem {
+ String uid, content, lid;
+ Boolean checked;
+
+ public ListItem(String uid, String lid, String content, Boolean checked) {
+ this.uid = uid;
+ this.lid = lid;
+ this.content = content;
+ this.checked = checked;
+ }
+
+ public String getLid() {
+ return lid;
+ }
+
+ public void setLid(String lid) {
+ this.lid = lid;
+ }
+
+ public String getUid() {
+ return uid;
+ }
+
+ public void setUid(String uid) {
+ this.uid = uid;
+ }
+
+ public String getContent() {
+ return content;
+ }
+
+ public void setContent(String content) {
+ this.content = content;
+ }
+
+ public Boolean getChecked() {
+ return checked;
+ }
+
+ public void setChecked(Boolean checked) {
+ this.checked = checked;
+ }
+}
diff --git a/app/src/main/java/com/pkmnapps/activitydo/dataclasses/ListWidget.java b/app/src/main/java/com/pkmnapps/activitydo/dataclasses/ListWidget.java
new file mode 100644
index 0000000..81fc904
--- /dev/null
+++ b/app/src/main/java/com/pkmnapps/activitydo/dataclasses/ListWidget.java
@@ -0,0 +1,36 @@
+package com.pkmnapps.activitydo.dataclasses;
+
+public class ListWidget {
+ String uid,aid;//uid is unique id, lid is list id, aid is activity id
+ String head;
+
+ public ListWidget(String uid, String aid, String head) {
+ this.uid = uid;
+ this.aid = aid;
+ this.head = head;
+ }
+
+ public String getUid() {
+ return uid;
+ }
+
+ public void setUid(String uid) {
+ this.uid = uid;
+ }
+
+ public String getAid() {
+ return aid;
+ }
+
+ public void setAid(String aid) {
+ this.aid = aid;
+ }
+
+ public String getHead() {
+ return head;
+ }
+
+ public void setHead(String head) {
+ this.head = head;
+ }
+}
diff --git a/app/src/main/java/com/pkmnapps/activitydo/dataclasses/SimpleTextWidget.java b/app/src/main/java/com/pkmnapps/activitydo/dataclasses/SimpleTextWidget.java
new file mode 100644
index 0000000..0b0a731
--- /dev/null
+++ b/app/src/main/java/com/pkmnapps/activitydo/dataclasses/SimpleTextWidget.java
@@ -0,0 +1,45 @@
+package com.pkmnapps.activitydo.dataclasses;
+
+public class SimpleTextWidget {
+ String aid,uid;
+ String head,body;
+
+ public SimpleTextWidget(String uid, String aid, String head, String body) {
+ this.aid = aid;//aid is of activity
+ this.uid = uid;//uid is unique aid of this element
+ this.head = head;
+ this.body = body;
+ }
+
+ public String getAid() {
+ return aid;
+ }
+
+ public void setAid(String aid) {
+ this.aid = aid;
+ }
+
+ public String getHead() {
+ return head;
+ }
+
+ public void setHead(String head) {
+ this.head = head;
+ }
+
+ public String getBody() {
+ return body;
+ }
+
+ public void setBody(String body) {
+ this.body = body;
+ }
+
+ public String getUid() {
+ return uid;
+ }
+
+ public void setUid(String uid) {
+ this.uid = uid;
+ }
+}
diff --git a/app/src/main/java/com/pkmnapps/activitydo/dataclasses/Widget.java b/app/src/main/java/com/pkmnapps/activitydo/dataclasses/Widget.java
new file mode 100644
index 0000000..e53f98f
--- /dev/null
+++ b/app/src/main/java/com/pkmnapps/activitydo/dataclasses/Widget.java
@@ -0,0 +1,42 @@
+package com.pkmnapps.activitydo.dataclasses;
+
+import android.content.Context;
+
+import com.pkmnapps.activitydo.databasehelpers.DBHelperWidgets;
+
+public class Widget {
+ int type;
+ Object object;
+ int sortOrder;
+ String uid;
+ public Widget(int type, Object object, String uid, int sortOrder) {
+ this.type = type;
+ this.object = object;
+ this.uid = uid;
+ this.sortOrder = sortOrder;
+ }
+
+ public int getType() {
+ return type;
+ }
+
+ public Object getObject() {
+ return object;
+ }
+
+ public int getSortOrder() {
+ return sortOrder;
+ }
+
+ public void setSortOrder(int sortOrder) {
+ this.sortOrder = sortOrder;
+ }
+
+ public String getUid() {
+ return uid;
+ }
+
+ public void setUid(String uid) {
+ this.uid = uid;
+ }
+}
diff --git a/app/src/main/res/drawable/ic_add_box_black_24dp.xml b/app/src/main/res/drawable/ic_add_box_black_24dp.xml
new file mode 100644
index 0000000..b2780f1
--- /dev/null
+++ b/app/src/main/res/drawable/ic_add_box_black_24dp.xml
@@ -0,0 +1,5 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_close_black_24dp.xml b/app/src/main/res/drawable/ic_close_black_24dp.xml
new file mode 100644
index 0000000..a4c503c
--- /dev/null
+++ b/app/src/main/res/drawable/ic_close_black_24dp.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_edit_black_24dp.xml b/app/src/main/res/drawable/ic_edit_black_24dp.xml
new file mode 100644
index 0000000..93f1e63
--- /dev/null
+++ b/app/src/main/res/drawable/ic_edit_black_24dp.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_home_black_24dp.xml b/app/src/main/res/drawable/ic_home_black_24dp.xml
new file mode 100644
index 0000000..70fb291
--- /dev/null
+++ b/app/src/main/res/drawable/ic_home_black_24dp.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_image_black_24dp.xml b/app/src/main/res/drawable/ic_image_black_24dp.xml
new file mode 100644
index 0000000..cdb4937
--- /dev/null
+++ b/app/src/main/res/drawable/ic_image_black_24dp.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_keyboard_voice_black_24dp.xml b/app/src/main/res/drawable/ic_keyboard_voice_black_24dp.xml
new file mode 100644
index 0000000..e4c8cd0
--- /dev/null
+++ b/app/src/main/res/drawable/ic_keyboard_voice_black_24dp.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_label_white_24dp.xml b/app/src/main/res/drawable/ic_label_white_24dp.xml
new file mode 100644
index 0000000..73b2849
--- /dev/null
+++ b/app/src/main/res/drawable/ic_label_white_24dp.xml
@@ -0,0 +1,5 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_list_black_24dp.xml b/app/src/main/res/drawable/ic_list_black_24dp.xml
new file mode 100644
index 0000000..f3010aa
--- /dev/null
+++ b/app/src/main/res/drawable/ic_list_black_24dp.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_mode_edit_black_24dp.xml b/app/src/main/res/drawable/ic_mode_edit_black_24dp.xml
new file mode 100644
index 0000000..7a51289
--- /dev/null
+++ b/app/src/main/res/drawable/ic_mode_edit_black_24dp.xml
@@ -0,0 +1,5 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_star_black_24dp.xml b/app/src/main/res/drawable/ic_star_black_24dp.xml
new file mode 100644
index 0000000..5bcb347
--- /dev/null
+++ b/app/src/main/res/drawable/ic_star_black_24dp.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_star_border_black_24dp.xml b/app/src/main/res/drawable/ic_star_border_black_24dp.xml
new file mode 100644
index 0000000..9dbef57
--- /dev/null
+++ b/app/src/main/res/drawable/ic_star_border_black_24dp.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/pinselector.xml b/app/src/main/res/drawable/pinselector.xml
new file mode 100644
index 0000000..4dc1fe2
--- /dev/null
+++ b/app/src/main/res/drawable/pinselector.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/side_nav_bar.xml b/app/src/main/res/drawable/side_nav_bar.xml
new file mode 100644
index 0000000..b811d09
--- /dev/null
+++ b/app/src/main/res/drawable/side_nav_bar.xml
@@ -0,0 +1,9 @@
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_image_view_fullscreen.xml b/app/src/main/res/layout/activity_image_view_fullscreen.xml
new file mode 100644
index 0000000..acab303
--- /dev/null
+++ b/app/src/main/res/layout/activity_image_view_fullscreen.xml
@@ -0,0 +1,40 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/activity_list.xml b/app/src/main/res/layout/activity_list.xml
new file mode 100644
index 0000000..16212f4
--- /dev/null
+++ b/app/src/main/res/layout/activity_list.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
new file mode 100644
index 0000000..a61d8a6
--- /dev/null
+++ b/app/src/main/res/layout/activity_main.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/activity_note.xml b/app/src/main/res/layout/activity_note.xml
new file mode 100644
index 0000000..da0eacf
--- /dev/null
+++ b/app/src/main/res/layout/activity_note.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_task.xml b/app/src/main/res/layout/activity_task.xml
new file mode 100644
index 0000000..8ac2a8f
--- /dev/null
+++ b/app/src/main/res/layout/activity_task.xml
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/app_bar_main.xml b/app/src/main/res/layout/app_bar_main.xml
new file mode 100644
index 0000000..1b78829
--- /dev/null
+++ b/app/src/main/res/layout/app_bar_main.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/audio_record_view.xml b/app/src/main/res/layout/audio_record_view.xml
new file mode 100644
index 0000000..a17671c
--- /dev/null
+++ b/app/src/main/res/layout/audio_record_view.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/color_circle.xml b/app/src/main/res/layout/color_circle.xml
new file mode 100644
index 0000000..395e7d7
--- /dev/null
+++ b/app/src/main/res/layout/color_circle.xml
@@ -0,0 +1,9 @@
+
+
diff --git a/app/src/main/res/layout/content_list.xml b/app/src/main/res/layout/content_list.xml
new file mode 100644
index 0000000..e080d73
--- /dev/null
+++ b/app/src/main/res/layout/content_list.xml
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/content_main.xml b/app/src/main/res/layout/content_main.xml
new file mode 100644
index 0000000..4a374bf
--- /dev/null
+++ b/app/src/main/res/layout/content_main.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/content_note.xml b/app/src/main/res/layout/content_note.xml
new file mode 100644
index 0000000..8811152
--- /dev/null
+++ b/app/src/main/res/layout/content_note.xml
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/content_task.xml b/app/src/main/res/layout/content_task.xml
new file mode 100644
index 0000000..2890b53
--- /dev/null
+++ b/app/src/main/res/layout/content_task.xml
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml
new file mode 100644
index 0000000..0257883
--- /dev/null
+++ b/app/src/main/res/layout/fragment_home.xml
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/image_widget_view.xml b/app/src/main/res/layout/image_widget_view.xml
new file mode 100644
index 0000000..eed7522
--- /dev/null
+++ b/app/src/main/res/layout/image_widget_view.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/nav_header_main.xml b/app/src/main/res/layout/nav_header_main.xml
new file mode 100644
index 0000000..211e10a
--- /dev/null
+++ b/app/src/main/res/layout/nav_header_main.xml
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/new_activity_alertbox.xml b/app/src/main/res/layout/new_activity_alertbox.xml
new file mode 100644
index 0000000..4b0f9eb
--- /dev/null
+++ b/app/src/main/res/layout/new_activity_alertbox.xml
@@ -0,0 +1,42 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/recycler_activity_layout.xml b/app/src/main/res/layout/recycler_activity_layout.xml
new file mode 100644
index 0000000..09a57b5
--- /dev/null
+++ b/app/src/main/res/layout/recycler_activity_layout.xml
@@ -0,0 +1,54 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/recycler_in_view_list_view.xml b/app/src/main/res/layout/recycler_in_view_list_view.xml
new file mode 100644
index 0000000..ff55176
--- /dev/null
+++ b/app/src/main/res/layout/recycler_in_view_list_view.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/recycler_list_in_task_view.xml b/app/src/main/res/layout/recycler_list_in_task_view.xml
new file mode 100644
index 0000000..6defca6
--- /dev/null
+++ b/app/src/main/res/layout/recycler_list_in_task_view.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/recycler_listitem_layout.xml b/app/src/main/res/layout/recycler_listitem_layout.xml
new file mode 100644
index 0000000..070c886
--- /dev/null
+++ b/app/src/main/res/layout/recycler_listitem_layout.xml
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/simple_note_view.xml b/app/src/main/res/layout/simple_note_view.xml
new file mode 100644
index 0000000..d4186aa
--- /dev/null
+++ b/app/src/main/res/layout/simple_note_view.xml
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/menu/activity_main_drawer.xml b/app/src/main/res/menu/activity_main_drawer.xml
new file mode 100644
index 0000000..6fd5b25
--- /dev/null
+++ b/app/src/main/res/menu/activity_main_drawer.xml
@@ -0,0 +1,33 @@
+
+
diff --git a/app/src/main/res/menu/main.xml b/app/src/main/res/menu/main.xml
new file mode 100644
index 0000000..60382d7
--- /dev/null
+++ b/app/src/main/res/menu/main.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
diff --git a/app/src/main/res/menu/menu_note.xml b/app/src/main/res/menu/menu_note.xml
new file mode 100644
index 0000000..fe187c0
--- /dev/null
+++ b/app/src/main/res/menu/menu_note.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/menu/menu_task_activity.xml b/app/src/main/res/menu/menu_task_activity.xml
new file mode 100644
index 0000000..232f675
--- /dev/null
+++ b/app/src/main/res/menu/menu_task_activity.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/menu/widget_menu.xml b/app/src/main/res/menu/widget_menu.xml
new file mode 100644
index 0000000..eea8f56
--- /dev/null
+++ b/app/src/main/res/menu/widget_menu.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
new file mode 100644
index 0000000..036d09b
--- /dev/null
+++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
new file mode 100644
index 0000000..036d09b
--- /dev/null
+++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.png b/app/src/main/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 0000000..3218dd2
Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png b/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png
new file mode 100644
index 0000000..bdcde46
Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png differ
diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
new file mode 100644
index 0000000..d9adb2b
Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/ic_launcher_round.png differ
diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher.png b/app/src/main/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 0000000..0a8a963
Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png b/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png
new file mode 100644
index 0000000..ffcb0b6
Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png differ
diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
new file mode 100644
index 0000000..f522f32
Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/ic_launcher_round.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/app/src/main/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 0000000..02bee13
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png b/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png
new file mode 100644
index 0000000..b5ade3a
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
new file mode 100644
index 0000000..11bb7cc
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 0000000..fe0a779
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png
new file mode 100644
index 0000000..120cb63
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
new file mode 100644
index 0000000..c3d4032
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 0000000..c2afa07
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png
new file mode 100644
index 0000000..8be81bc
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
new file mode 100644
index 0000000..9a94915
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png differ
diff --git a/app/src/main/res/values-v21/styles.xml b/app/src/main/res/values-v21/styles.xml
new file mode 100644
index 0000000..d2b79dc
--- /dev/null
+++ b/app/src/main/res/values-v21/styles.xml
@@ -0,0 +1,8 @@
+
+
+
+
diff --git a/app/src/main/res/values/attrs.xml b/app/src/main/res/values/attrs.xml
new file mode 100644
index 0000000..7ce840e
--- /dev/null
+++ b/app/src/main/res/values/attrs.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
new file mode 100644
index 0000000..41573af
--- /dev/null
+++ b/app/src/main/res/values/colors.xml
@@ -0,0 +1,17 @@
+
+
+ #556873
+ #38444b
+ #646464
+
+ #14000000
+
+ #000000
+ #5c5c5c
+
+ #ffffff
+
+ #66000000
+
+
+
diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml
new file mode 100644
index 0000000..4ab4520
--- /dev/null
+++ b/app/src/main/res/values/dimens.xml
@@ -0,0 +1,8 @@
+
+
+ 16dp
+ 16dp
+ 8dp
+ 176dp
+ 16dp
+
\ No newline at end of file
diff --git a/app/src/main/res/values/drawables.xml b/app/src/main/res/values/drawables.xml
new file mode 100644
index 0000000..52c6a6c
--- /dev/null
+++ b/app/src/main/res/values/drawables.xml
@@ -0,0 +1,8 @@
+
+ - @android:drawable/ic_menu_camera
+ - @android:drawable/ic_menu_gallery
+ - @android:drawable/ic_menu_slideshow
+ - @android:drawable/ic_menu_manage
+ - @android:drawable/ic_menu_share
+ - @android:drawable/ic_menu_send
+
diff --git a/app/src/main/res/values/ic_launcher_background.xml b/app/src/main/res/values/ic_launcher_background.xml
new file mode 100644
index 0000000..fb312f4
--- /dev/null
+++ b/app/src/main/res/values/ic_launcher_background.xml
@@ -0,0 +1,4 @@
+
+
+ #556873
+
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
new file mode 100644
index 0000000..db68e48
--- /dev/null
+++ b/app/src/main/res/values/strings.xml
@@ -0,0 +1,21 @@
+
+ ActivityDo
+ Open navigation drawer
+ Close navigation drawer
+ Activity-Do
+ - pkmnApps
+ Navigation header
+ Settings
+
+
+ Hello blank fragment
+ TaskActivity
+ NoteActivity
+ ListActivity
+ Hold to Record
+ Title
+ + List Item
+ Note
+ Add New Activity+
+ Color Theme -
+
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
new file mode 100644
index 0000000..196bb20
--- /dev/null
+++ b/app/src/main/res/values/styles.xml
@@ -0,0 +1,66 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/xml/file_paths.xml b/app/src/main/res/xml/file_paths.xml
new file mode 100644
index 0000000..f104884
--- /dev/null
+++ b/app/src/main/res/xml/file_paths.xml
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/app/src/test/java/com/pkmnapps/activitydo/ExampleUnitTest.java b/app/src/test/java/com/pkmnapps/activitydo/ExampleUnitTest.java
new file mode 100644
index 0000000..1b8899e
--- /dev/null
+++ b/app/src/test/java/com/pkmnapps/activitydo/ExampleUnitTest.java
@@ -0,0 +1,17 @@
+package com.pkmnapps.activitydo;
+
+import org.junit.Test;
+
+import static org.junit.Assert.*;
+
+/**
+ * Example local unit test, which will execute on the development machine (host).
+ *
+ * @see Testing documentation
+ */
+public class ExampleUnitTest {
+ @Test
+ public void addition_isCorrect() {
+ assertEquals(4, 2 + 2);
+ }
+}
\ No newline at end of file
diff --git a/build.gradle b/build.gradle
new file mode 100644
index 0000000..8fd7939
--- /dev/null
+++ b/build.gradle
@@ -0,0 +1,28 @@
+// Top-level build file where you can add configuration options common to all sub-projects/modules.
+
+buildscript {
+
+ repositories {
+ google()
+ jcenter()
+ }
+ dependencies {
+ classpath 'com.android.tools.build:gradle:3.1.2'
+
+
+ // NOTE: Do not place your application dependencies here; they belong
+ // in the individual module build.gradle files
+ }
+}
+
+allprojects {
+ repositories {
+ google()
+ jcenter()
+ maven { url "https://jitpack.io" }
+ }
+}
+
+task clean(type: Delete) {
+ delete rootProject.buildDir
+}
diff --git a/gradle.properties b/gradle.properties
new file mode 100644
index 0000000..743d692
--- /dev/null
+++ b/gradle.properties
@@ -0,0 +1,13 @@
+# Project-wide Gradle settings.
+# IDE (e.g. Android Studio) users:
+# Gradle settings configured through the IDE *will override*
+# any settings specified in this file.
+# For more details on how to configure your build environment visit
+# http://www.gradle.org/docs/current/userguide/build_environment.html
+# Specifies the JVM arguments used for the daemon process.
+# The setting is particularly useful for tweaking memory settings.
+org.gradle.jvmargs=-Xmx1536m
+# When configured, Gradle will run in incubating parallel mode.
+# This option should only be used with decoupled projects. More details, visit
+# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
+# org.gradle.parallel=true
diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar
new file mode 100644
index 0000000..7a3265e
Binary files /dev/null and b/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 0000000..d08ee79
--- /dev/null
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,6 @@
+#Sat May 19 13:15:29 IST 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
diff --git a/gradlew b/gradlew
new file mode 100755
index 0000000..cccdd3d
--- /dev/null
+++ b/gradlew
@@ -0,0 +1,172 @@
+#!/usr/bin/env sh
+
+##############################################################################
+##
+## Gradle start up script for UN*X
+##
+##############################################################################
+
+# Attempt to set APP_HOME
+# Resolve links: $0 may be a link
+PRG="$0"
+# Need this for relative symlinks.
+while [ -h "$PRG" ] ; do
+ ls=`ls -ld "$PRG"`
+ link=`expr "$ls" : '.*-> \(.*\)$'`
+ if expr "$link" : '/.*' > /dev/null; then
+ PRG="$link"
+ else
+ PRG=`dirname "$PRG"`"/$link"
+ fi
+done
+SAVED="`pwd`"
+cd "`dirname \"$PRG\"`/" >/dev/null
+APP_HOME="`pwd -P`"
+cd "$SAVED" >/dev/null
+
+APP_NAME="Gradle"
+APP_BASE_NAME=`basename "$0"`
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS=""
+
+# Use the maximum available, or set MAX_FD != -1 to use that value.
+MAX_FD="maximum"
+
+warn () {
+ echo "$*"
+}
+
+die () {
+ echo
+ echo "$*"
+ echo
+ exit 1
+}
+
+# OS specific support (must be 'true' or 'false').
+cygwin=false
+msys=false
+darwin=false
+nonstop=false
+case "`uname`" in
+ CYGWIN* )
+ cygwin=true
+ ;;
+ Darwin* )
+ darwin=true
+ ;;
+ MINGW* )
+ msys=true
+ ;;
+ NONSTOP* )
+ nonstop=true
+ ;;
+esac
+
+CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
+
+# Determine the Java command to use to start the JVM.
+if [ -n "$JAVA_HOME" ] ; then
+ if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+ # IBM's JDK on AIX uses strange locations for the executables
+ JAVACMD="$JAVA_HOME/jre/sh/java"
+ else
+ JAVACMD="$JAVA_HOME/bin/java"
+ fi
+ if [ ! -x "$JAVACMD" ] ; then
+ die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+ fi
+else
+ JAVACMD="java"
+ which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+fi
+
+# Increase the maximum file descriptors if we can.
+if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
+ MAX_FD_LIMIT=`ulimit -H -n`
+ if [ $? -eq 0 ] ; then
+ if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
+ MAX_FD="$MAX_FD_LIMIT"
+ fi
+ ulimit -n $MAX_FD
+ if [ $? -ne 0 ] ; then
+ warn "Could not set maximum file descriptor limit: $MAX_FD"
+ fi
+ else
+ warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
+ fi
+fi
+
+# For Darwin, add options to specify how the application appears in the dock
+if $darwin; then
+ GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
+fi
+
+# For Cygwin, switch paths to Windows format before running java
+if $cygwin ; then
+ APP_HOME=`cygpath --path --mixed "$APP_HOME"`
+ CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
+ JAVACMD=`cygpath --unix "$JAVACMD"`
+
+ # We build the pattern for arguments to be converted via cygpath
+ ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
+ SEP=""
+ for dir in $ROOTDIRSRAW ; do
+ ROOTDIRS="$ROOTDIRS$SEP$dir"
+ SEP="|"
+ done
+ OURCYGPATTERN="(^($ROOTDIRS))"
+ # Add a user-defined pattern to the cygpath arguments
+ if [ "$GRADLE_CYGPATTERN" != "" ] ; then
+ OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
+ fi
+ # Now convert the arguments - kludge to limit ourselves to /bin/sh
+ i=0
+ for arg in "$@" ; do
+ CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
+ CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
+
+ if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
+ eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
+ else
+ eval `echo args$i`="\"$arg\""
+ fi
+ i=$((i+1))
+ done
+ case $i in
+ (0) set -- ;;
+ (1) set -- "$args0" ;;
+ (2) set -- "$args0" "$args1" ;;
+ (3) set -- "$args0" "$args1" "$args2" ;;
+ (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
+ (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
+ (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
+ (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
+ (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
+ (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
+ esac
+fi
+
+# Escape application args
+save () {
+ for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
+ echo " "
+}
+APP_ARGS=$(save "$@")
+
+# Collect all arguments for the java command, following the shell quoting and substitution rules
+eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
+
+# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
+if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
+ cd "$(dirname "$0")"
+fi
+
+exec "$JAVACMD" "$@"
diff --git a/gradlew.bat b/gradlew.bat
new file mode 100644
index 0000000..e95643d
--- /dev/null
+++ b/gradlew.bat
@@ -0,0 +1,84 @@
+@if "%DEBUG%" == "" @echo off
+@rem ##########################################################################
+@rem
+@rem Gradle startup script for Windows
+@rem
+@rem ##########################################################################
+
+@rem Set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" setlocal
+
+set DIRNAME=%~dp0
+if "%DIRNAME%" == "" set DIRNAME=.
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS=
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if "%ERRORLEVEL%" == "0" goto init
+
+echo.
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto init
+
+echo.
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:init
+@rem Get command-line arguments, handling Windows variants
+
+if not "%OS%" == "Windows_NT" goto win9xME_args
+
+:win9xME_args
+@rem Slurp the command line arguments.
+set CMD_LINE_ARGS=
+set _SKIP=2
+
+:win9xME_args_slurp
+if "x%~1" == "x" goto execute
+
+set CMD_LINE_ARGS=%*
+
+:execute
+@rem Setup the command line
+
+set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+
+@rem Execute Gradle
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
+
+:end
+@rem End local scope for the variables with windows NT shell
+if "%ERRORLEVEL%"=="0" goto mainEnd
+
+:fail
+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
+rem the _cmd.exe /c_ return code!
+if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
+exit /b 1
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega
diff --git a/settings.gradle b/settings.gradle
new file mode 100644
index 0000000..e7b4def
--- /dev/null
+++ b/settings.gradle
@@ -0,0 +1 @@
+include ':app'