diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5edb4ee --- /dev/null +++ b/.gitignore @@ -0,0 +1,10 @@ +*.iml +.gradle +/local.properties +/.idea/libraries +/.idea/modules.xml +/.idea/workspace.xml +.DS_Store +/build +/captures +.externalNativeBuild diff --git a/.idea/assetWizardSettings.xml b/.idea/assetWizardSettings.xml new file mode 100644 index 0000000..b3900d1 --- /dev/null +++ b/.idea/assetWizardSettings.xml @@ -0,0 +1,96 @@ + + + + + + \ No newline at end of file diff --git a/.idea/caches/build_file_checksums.ser b/.idea/caches/build_file_checksums.ser new file mode 100644 index 0000000..dc5e54f Binary files /dev/null and b/.idea/caches/build_file_checksums.ser differ diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml new file mode 100644 index 0000000..30aa626 --- /dev/null +++ b/.idea/codeStyles/Project.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml new file mode 100644 index 0000000..7ac24c7 --- /dev/null +++ b/.idea/gradle.xml @@ -0,0 +1,18 @@ + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..99202cc --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/runConfigurations.xml b/.idea/runConfigurations.xml new file mode 100644 index 0000000..7f68460 --- /dev/null +++ b/.idea/runConfigurations.xml @@ -0,0 +1,12 @@ + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/.gitignore b/app/.gitignore new file mode 100644 index 0000000..796b96d --- /dev/null +++ b/app/.gitignore @@ -0,0 +1 @@ +/build diff --git a/app/build.gradle b/app/build.gradle new file mode 100644 index 0000000..823380a --- /dev/null +++ b/app/build.gradle @@ -0,0 +1,46 @@ +apply plugin: 'com.android.application' + +android { + compileSdkVersion 27 + defaultConfig { + applicationId "com.pkmnapps.activitydo" + minSdkVersion 19 + targetSdkVersion 27 + versionCode 1 + versionName "1.0" + testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" + multiDexEnabled true + + } + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + } + } +} + +dependencies { + implementation fileTree(dir: 'libs', include: ['*.jar']) + implementation 'com.android.support:appcompat-v7:27.1.1' + implementation 'com.android.support:design:27.1.1' + implementation 'com.android.support.constraint:constraint-layout:1.1.0' + implementation 'com.android.support:support-v4:27.1.1' + testImplementation 'junit:junit:4.12' + androidTestImplementation 'com.android.support.test:runner:1.0.2' + androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' + + implementation 'com.android.support:recyclerview-v7:27.1.1' + implementation 'com.android.support:cardview-v7:27.1.1' + + implementation 'com.flipboard:bottomsheet-core:1.5.3' + implementation 'com.flipboard:bottomsheet-commons:1.5.3' + + implementation 'com.github.bumptech.glide:glide:4.7.1' + annotationProcessor 'com.github.bumptech.glide:compiler:4.7.1' + + implementation 'com.github.chrisbanes:PhotoView:2.0.0' + + implementation 'com.android.support:multidex:1.0.3' + +} diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro new file mode 100644 index 0000000..f1b4245 --- /dev/null +++ b/app/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile diff --git a/app/src/androidTest/java/com/pkmnapps/activitydo/ExampleInstrumentedTest.java b/app/src/androidTest/java/com/pkmnapps/activitydo/ExampleInstrumentedTest.java new file mode 100644 index 0000000..1c2cc31 --- /dev/null +++ b/app/src/androidTest/java/com/pkmnapps/activitydo/ExampleInstrumentedTest.java @@ -0,0 +1,26 @@ +package com.pkmnapps.activitydo; + +import android.content.Context; +import android.support.test.InstrumentationRegistry; +import android.support.test.runner.AndroidJUnit4; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import static org.junit.Assert.*; + +/** + * Instrumented test, which will execute on an Android device. + * + * @see Testing documentation + */ +@RunWith(AndroidJUnit4.class) +public class ExampleInstrumentedTest { + @Test + public void useAppContext() { + // Context of the app under test. + Context appContext = InstrumentationRegistry.getTargetContext(); + + assertEquals("com.pkmnapps.activitydo", appContext.getPackageName()); + } +} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..6a694dc --- /dev/null +++ b/app/src/main/AndroidManifest.xml @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/ic_launcher-web.png b/app/src/main/ic_launcher-web.png new file mode 100644 index 0000000..3cc05a9 Binary files /dev/null and b/app/src/main/ic_launcher-web.png differ diff --git a/app/src/main/java/com/pkmnapps/activitydo/HomeFragment.java b/app/src/main/java/com/pkmnapps/activitydo/HomeFragment.java new file mode 100644 index 0000000..60bab78 --- /dev/null +++ b/app/src/main/java/com/pkmnapps/activitydo/HomeFragment.java @@ -0,0 +1,354 @@ +package com.pkmnapps.activitydo; + +import android.app.AlertDialog; +import android.content.Context; +import android.content.DialogInterface; + +import android.graphics.Color; +import android.net.Uri; +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.support.v7.widget.DefaultItemAnimator; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.support.v7.widget.helper.ItemTouchHelper; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Button; +import android.widget.EditText; +import android.widget.ListView; + + +import com.pkmnapps.activitydo.adapters.ActivityAdapter; +import com.pkmnapps.activitydo.adapters.ColorThemeAdapter; +import com.pkmnapps.activitydo.custominterfaces.HomeFragInterace; +import com.pkmnapps.activitydo.databasehelpers.DBHelper; +import com.pkmnapps.activitydo.dataclasses.ActivityData; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Random; + + +/** + * A simple {@link Fragment} subclass. + * Activities that contain this fragment must implement the + * {@link HomeFragment.OnFragmentInteractionListener} interface + * to handle interaction events. + * Use the {@link HomeFragment#newInstance} factory method to + * create an instance of this fragment. + */ + +public class HomeFragment extends Fragment implements HomeFragInterace{ + View view; + List 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 @@ + + + + +