diff --git a/app/build.gradle b/app/build.gradle index 82946b1..4f881e1 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -6,8 +6,8 @@ android { defaultConfig { applicationId "com.github.orangegangsters.lollipin" - minSdkVersion 14 - targetSdkVersion 24 + minSdkVersion 16 + targetSdkVersion 26 versionCode 1 versionName "1.0" } @@ -30,6 +30,13 @@ dependencies { //test androidTestCompile 'com.jayway.android.robotium:robotium-solo:5.5.2' + + compile 'com.android.support:design:26.0.2' + compile 'com.android.support:recyclerview-v7:26.0.0' + compile 'com.android.support:support-v4:26.0.2' + compile "com.daimajia.swipelayout:library:1.2.0@aar" + compile 'petrov.kristiyan.colorpicker:colorpicker-library:1.1.2' + compile 'com.google.android.gms:play-services-appindexing:9.8.0' } // REQUIRED: Google's new Maven repo is required for the latest diff --git a/app/src/androidTest/java/lollipin/orangegangsters/github/com/lollipin/functional/PinLockTest.java b/app/src/androidTest/java/lollipin/orangegangsters/github/com/lollipin/functional/PinLockTest.java deleted file mode 100644 index f2b5ff4..0000000 --- a/app/src/androidTest/java/lollipin/orangegangsters/github/com/lollipin/functional/PinLockTest.java +++ /dev/null @@ -1,339 +0,0 @@ -package lollipin.orangegangsters.github.com.lollipin.functional; - -import android.content.Context; -import android.content.SharedPreferences; -import android.hardware.fingerprint.FingerprintManager; -import android.os.Build; -import android.preference.PreferenceManager; -import android.view.View; -import android.widget.ImageView; -import android.widget.TextView; - -import com.github.omadahealth.lollipin.CustomPinActivity; -import com.github.omadahealth.lollipin.MainActivity; -import com.github.omadahealth.lollipin.NotLockedActivity; -import com.github.omadahealth.lollipin.lib.encryption.Encryptor; -import com.github.omadahealth.lollipin.lib.enums.Algorithm; -import com.github.omadahealth.lollipin.lib.managers.AppLockImpl; -import com.github.omadahealth.lollipin.lib.managers.FingerprintUiHelper; -import com.github.omadahealth.lollipin.lib.managers.LockManager; -import com.github.omadahealth.lollipin.lib.views.PinCodeRoundView; - -import lollipin.orangegangsters.github.com.lollipin.R; - -/** - * @author stoyan and oliviergoutay - * @version 1/13/15 - */ -public class PinLockTest extends AbstractTest { - - public void testMigratingFromSha1toSha256() { - //Init - removeAllPrefs(); - AppLockImpl appLockImpl = (AppLockImpl) LockManager.getInstance().getAppLock(); - SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(getActivity()); - - //Should use sha256 if the SharedPreferences is set, by default - enablePin(); - assertEquals(Algorithm.SHA256, Algorithm.getFromText(sharedPref.getString(PASSWORD_ALGORITHM_PREFERENCE_KEY, ""))); - assertTrue(appLockImpl.checkPasscode("1234")); - removeAllPrefs(); - - //Should still use sha1 if password is stored but not the algorithm - SharedPreferences.Editor editor = sharedPref.edit(); - editor.putString(PASSWORD_PREFERENCE_KEY, Encryptor.getSHA(appLockImpl.getSalt() + "test" + appLockImpl.getSalt(), Algorithm.SHA1)); - editor.apply(); - assertEquals(Algorithm.SHA1, Algorithm.getFromText(sharedPref.getString(PASSWORD_ALGORITHM_PREFERENCE_KEY, ""))); - assertTrue(appLockImpl.checkPasscode("test")); - removeAllPrefs(); - } - - public void testPinClearButton() { - removePrefsAndGoToEnable(); - - //Enter 3 codes - clickOnView(R.id.pin_code_button_1); - clickOnView(R.id.pin_code_button_2); - clickOnView(R.id.pin_code_button_3); - - //Check length 3 - solo.sleep(1000); - PinCodeRoundView pinCodeRoundView = (PinCodeRoundView) solo.getCurrentActivity().findViewById(com.github.omadahealth.lollipin.lib.R.id.pin_code_round_view); - assertEquals(3, pinCodeRoundView.getCurrentLength()); - - //Click clear button - clickOnView(R.id.pin_code_button_clear); - - //Check length 0 - solo.sleep(1000); - assertEquals(2, pinCodeRoundView.getCurrentLength()); - } - - public void testPinEnabling() { - removePrefsAndGoToEnable(); - - //Test no fingerprint - assertEquals(View.GONE, solo.getView(R.id.pin_code_fingerprint_imageview).getVisibility()); - assertEquals(View.GONE, solo.getView(R.id.pin_code_fingerprint_textview).getVisibility()); - - //--------Not the same pin-------- - //Enter 4 codes - clickOnView(R.id.pin_code_button_1); - clickOnView(R.id.pin_code_button_2); - clickOnView(R.id.pin_code_button_3); - clickOnView(R.id.pin_code_button_4); - solo.sleep(1000); - clickOnView(R.id.pin_code_button_2); - clickOnView(R.id.pin_code_button_3); - clickOnView(R.id.pin_code_button_4); - clickOnView(R.id.pin_code_button_5); - solo.waitForActivity(CustomPinActivity.class); - solo.assertCurrentActivity("CustomPinActivity", CustomPinActivity.class); - solo.sleep(1000); - - //--------Same pin-------- - enablePin(); - } - - public void testPinEnablingChecking() throws SecurityException { - enablePin(); - - //Go to unlock - clickOnView(R.id.button_unlock_pin); - solo.waitForActivity(CustomPinActivity.class); - solo.assertCurrentActivity("CustomPinActivity", CustomPinActivity.class); - - //Test fingerprint if available - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { - ImageView fingerprintImageView = (ImageView) solo.getView(com.github.omadahealth.lollipin.lib.R.id.pin_code_fingerprint_imageview); - TextView fingerprintTextView = (TextView) solo.getView(com.github.omadahealth.lollipin.lib.R.id.pin_code_fingerprint_textview); - FingerprintManager fingerprintManager = (FingerprintManager) getActivity().getSystemService(Context.FINGERPRINT_SERVICE); - FingerprintUiHelper fingerprintUiHelper = new FingerprintUiHelper.FingerprintUiHelperBuilder(fingerprintManager).build(fingerprintImageView, fingerprintTextView, (CustomPinActivity) solo.getCurrentActivity()); - if (fingerprintManager.isHardwareDetected() && fingerprintUiHelper.isFingerprintAuthAvailable()) { - assertEquals(View.VISIBLE, solo.getView(R.id.pin_code_fingerprint_imageview).getVisibility()); - assertEquals(View.VISIBLE, solo.getView(R.id.pin_code_fingerprint_textview).getVisibility()); - } else { - assertEquals(View.GONE, solo.getView(R.id.pin_code_fingerprint_imageview).getVisibility()); - assertEquals(View.GONE, solo.getView(R.id.pin_code_fingerprint_textview).getVisibility()); - } - } else { - assertEquals(View.GONE, solo.getView(R.id.pin_code_fingerprint_imageview).getVisibility()); - assertEquals(View.GONE, solo.getView(R.id.pin_code_fingerprint_textview).getVisibility()); - } - - //Enter the code - clickOnView(R.id.pin_code_button_1); - clickOnView(R.id.pin_code_button_2); - clickOnView(R.id.pin_code_button_3); - clickOnView(R.id.pin_code_button_4); - - //Check view - solo.waitForActivity(MainActivity.class); - solo.assertCurrentActivity("MainActivity", MainActivity.class); - } - - public void testPinEnablingChanging() { - enablePin(); - - //Go to change - clickOnView(R.id.button_change_pin); - solo.waitForActivity(CustomPinActivity.class); - solo.assertCurrentActivity("CustomPinActivity", CustomPinActivity.class); - - //Enter previous code - clickOnView(R.id.pin_code_button_1); - clickOnView(R.id.pin_code_button_2); - clickOnView(R.id.pin_code_button_3); - clickOnView(R.id.pin_code_button_4); - solo.sleep(1000); - - //Enter the new one - clickOnView(R.id.pin_code_button_2); - clickOnView(R.id.pin_code_button_3); - clickOnView(R.id.pin_code_button_4); - clickOnView(R.id.pin_code_button_5); - solo.sleep(1000); - clickOnView(R.id.pin_code_button_2); - clickOnView(R.id.pin_code_button_3); - clickOnView(R.id.pin_code_button_4); - clickOnView(R.id.pin_code_button_5); - solo.waitForActivity(MainActivity.class); - solo.assertCurrentActivity("MainActivity", MainActivity.class); - - //Go to unlock - clickOnView(R.id.button_unlock_pin); - solo.waitForActivity(CustomPinActivity.class); - solo.assertCurrentActivity("CustomPinActivity", CustomPinActivity.class); - - //Enter the code - clickOnView(R.id.pin_code_button_2); - clickOnView(R.id.pin_code_button_3); - clickOnView(R.id.pin_code_button_4); - clickOnView(R.id.pin_code_button_5); - - //Check view - solo.waitForActivity(MainActivity.class); - solo.assertCurrentActivity("MainActivity", MainActivity.class); - } - - public void testPinLockAfterDefaultTimeout() { - enablePin(); - - //Go to NotLockedActivity - solo.sleep(1000); - clickOnView(R.id.button_not_locked); - solo.waitForActivity(NotLockedActivity.class); - solo.assertCurrentActivity("NotLockedActivity", NotLockedActivity.class); - - //Set the last time to now - 11sec - setMillis(System.currentTimeMillis() - (1000 * 15)); - solo.getCurrentActivity().finish(); - - //Check view - solo.waitForActivity(CustomPinActivity.class); - solo.assertCurrentActivity("CustomPinActivity", CustomPinActivity.class); - solo.sleep(1000); - } - - public void testPinLockAfterCustomTimeout() { - enablePin(); - - //Set to 3minutes - LockManager.getInstance().getAppLock().setTimeout(1000 * 60 * 3); - - //Go to NotLockedActivity - clickOnView(R.id.button_not_locked); - solo.waitForActivity(NotLockedActivity.class); - solo.assertCurrentActivity("NotLockedActivity", NotLockedActivity.class); - - //Set the last time to now - 11sec - setMillis(System.currentTimeMillis() - (1000 * 11)); - solo.getCurrentActivity().finish(); - - //Check view - solo.waitForActivity(MainActivity.class); - solo.assertCurrentActivity("MainActivity", MainActivity.class); - solo.sleep(1000); - - //Go to NotLockedActivity - clickOnView(R.id.button_not_locked); - solo.waitForActivity(NotLockedActivity.class); - solo.assertCurrentActivity("NotLockedActivity", NotLockedActivity.class); - - //Set the last time to now - 6minutes - setMillis(System.currentTimeMillis() - (1000 * 60 * 6)); - solo.getCurrentActivity().finish(); - - //Check view - solo.waitForActivity(CustomPinActivity.class); - solo.assertCurrentActivity("CustomPinActivity", CustomPinActivity.class); - solo.sleep(1000); - } - - public void testPinLockWithBackgroundTimeout() { - enablePin(); - - // Set the option to use timeout in background only - SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(getActivity()); - SharedPreferences.Editor editor = sharedPref.edit(); - editor.putBoolean(ONLY_BACKGROUND_TIMEOUT_PREFERENCE_KEY, true); - editor.apply(); - - //Go to NotLockedActivity - solo.sleep(1000); - clickOnView(R.id.button_not_locked); - solo.waitForActivity(NotLockedActivity.class); - solo.assertCurrentActivity("NotLockedActivity", NotLockedActivity.class); - - //Set the last time to now - 15sec - setMillis(System.currentTimeMillis() - (1000 * 15)); - solo.getCurrentActivity().finish(); - - //Check view - solo.waitForActivity(MainActivity.class); - solo.assertCurrentActivity("MainActivity", MainActivity.class); - solo.sleep(1000); - } - - public void testBackButton() { - enablePin(); - - //Go to unlock - clickOnView(R.id.button_unlock_pin); - solo.waitForActivity(CustomPinActivity.class); - solo.assertCurrentActivity("CustomPinActivity", CustomPinActivity.class); - - solo.goBack(); - solo.assertCurrentActivity("CustomPinActivity", CustomPinActivity.class); - - //reset - clickOnView(R.id.pin_code_button_1); - clickOnView(R.id.pin_code_button_2); - clickOnView(R.id.pin_code_button_3); - clickOnView(R.id.pin_code_button_4); - solo.sleep(1000); - - //Go to change - clickOnView(R.id.button_change_pin); - solo.waitForActivity(CustomPinActivity.class); - solo.assertCurrentActivity("CustomPinActivity", CustomPinActivity.class); - - solo.goBack(); - solo.assertCurrentActivity("MainActivity", MainActivity.class); - } - - public void testDisablingFingerprintReader() { - enablePin(); - - // Disable fingerprint reader. - LockManager.getInstance().getAppLock().setFingerprintAuthEnabled(false); - - // Go to unlock. - clickOnView(R.id.button_unlock_pin); - solo.waitForActivity(CustomPinActivity.class); - solo.assertCurrentActivity("CustomPinActivity", CustomPinActivity.class); - - // Make sure the fingerprint views are gone. - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { - assertEquals(View.GONE, solo.getView(R.id.pin_code_fingerprint_imageview).getVisibility()); - assertEquals(View.GONE, solo.getView(R.id.pin_code_fingerprint_textview).getVisibility()); - } - - // Make sure pin unlocking still works. - clickOnView(R.id.pin_code_button_1); - clickOnView(R.id.pin_code_button_2); - clickOnView(R.id.pin_code_button_3); - clickOnView(R.id.pin_code_button_4); - solo.waitForActivity(MainActivity.class); - solo.assertCurrentActivity("MainActivity", MainActivity.class); - } - - private void enablePin() { - removePrefsAndGoToEnable(); - - clickOnView(R.id.pin_code_button_1); - clickOnView(R.id.pin_code_button_2); - clickOnView(R.id.pin_code_button_3); - clickOnView(R.id.pin_code_button_4); - solo.sleep(1000); - clickOnView(R.id.pin_code_button_1); - clickOnView(R.id.pin_code_button_2); - clickOnView(R.id.pin_code_button_3); - clickOnView(R.id.pin_code_button_4); - solo.waitForActivity(MainActivity.class); - solo.assertCurrentActivity("MainActivity", MainActivity.class); - } - - private void removePrefsAndGoToEnable() { - //init - removeAllPrefs(); - - //Go to enable - if (solo.getCurrentActivity() instanceof MainActivity) { - clickOnView(R.id.button_enable_pin); - solo.waitForActivity(CustomPinActivity.class); - solo.assertCurrentActivity("CustomPinActivity", CustomPinActivity.class); - solo.waitForText("1"); - } - } -} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6e1523c..c79c365 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,13 +1,21 @@ + + + + + + + + + android:theme="@style/Theme.AppCompat.Light.NoActionBar" > @@ -18,16 +26,31 @@ + android:name="com.github.omadahealth.lollipin.TimerActivity" + android:label="@string/app_name" + android:launchMode="singleTop"> + + + + - + + + + + + + + + + + + + diff --git a/app/src/main/java/com/github/omadahealth/lollipin/AboutPomocnik.java b/app/src/main/java/com/github/omadahealth/lollipin/AboutPomocnik.java new file mode 100644 index 0000000..a92e05b --- /dev/null +++ b/app/src/main/java/com/github/omadahealth/lollipin/AboutPomocnik.java @@ -0,0 +1,16 @@ +package com.github.omadahealth.lollipin; + +import android.os.Bundle; +import android.support.v7.app.ActionBar; +import android.support.v7.app.AppCompatActivity; + +import lollipin.orangegangsters.github.com.lollipin.R; + +public class AboutPomocnik extends AppCompatActivity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_about_pomocnik); + } +} diff --git a/app/src/main/java/com/github/omadahealth/lollipin/CustomPinActivity.java b/app/src/main/java/com/github/omadahealth/lollipin/CustomPinActivity.java index cb33aa5..3e98f27 100644 --- a/app/src/main/java/com/github/omadahealth/lollipin/CustomPinActivity.java +++ b/app/src/main/java/com/github/omadahealth/lollipin/CustomPinActivity.java @@ -1,5 +1,6 @@ package com.github.omadahealth.lollipin; +import android.content.Intent; import android.content.res.Resources; import android.graphics.Color; import android.graphics.Typeface; @@ -7,6 +8,7 @@ import android.graphics.drawable.ColorDrawable; import android.widget.Toast; import com.github.omadahealth.lollipin.lib.managers.AppLockActivity; +import com.github.omadahealth.todo.MainActivity; import lollipin.orangegangsters.github.com.lollipin.R; import uk.me.lewisdeane.ldialogs.BaseDialog; @@ -70,7 +72,8 @@ public class CustomPinActivity extends AppLockActivity { @Override public void onPinSuccess(int attempts) { - + Intent intent = new Intent(this, TimerActivity.class); + startActivity(intent); } @Override diff --git a/app/src/main/java/com/github/omadahealth/lollipin/MainActivity.java b/app/src/main/java/com/github/omadahealth/lollipin/MainActivity.java index 07651b7..8686050 100644 --- a/app/src/main/java/com/github/omadahealth/lollipin/MainActivity.java +++ b/app/src/main/java/com/github/omadahealth/lollipin/MainActivity.java @@ -14,17 +14,22 @@ import lollipin.orangegangsters.github.com.lollipin.R; public class MainActivity extends PinActivity implements View.OnClickListener { private static final int REQUEST_CODE_ENABLE = 11; + private static boolean first = true; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - setContentView(R.layout.activity_main); + //setContentView(R.layout.activity_main); + Intent intent = new Intent(MainActivity.this, CustomPinActivity.class); - this.findViewById(R.id.button_enable_pin).setOnClickListener(this); - this.findViewById(R.id.button_change_pin).setOnClickListener(this); - this.findViewById(R.id.button_unlock_pin).setOnClickListener(this); - this.findViewById(R.id.button_compat_locked).setOnClickListener(this); - this.findViewById(R.id.button_not_locked).setOnClickListener(this); + if (first) { + intent.putExtra(AppLock.EXTRA_TYPE, AppLock.ENABLE_PINLOCK); + startActivityForResult(intent, REQUEST_CODE_ENABLE); + first = false; + } else { + intent.putExtra(AppLock.EXTRA_TYPE, AppLock.UNLOCK_PIN); + startActivity(intent); + } } @Override @@ -44,12 +49,9 @@ public class MainActivity extends PinActivity implements View.OnClickListener { startActivity(intent); break; case R.id.button_compat_locked: - Intent intent2 = new Intent(MainActivity.this, LockedCompatActivity.class); + Intent intent2 = new Intent(MainActivity.this, TimerActivity.class); startActivity(intent2); break; - case R.id.button_not_locked: - Intent intent3 = new Intent(MainActivity.this, NotLockedActivity.class); - startActivity(intent3); } } diff --git a/app/src/main/java/com/github/omadahealth/lollipin/NotificationPublisher.java b/app/src/main/java/com/github/omadahealth/lollipin/NotificationPublisher.java new file mode 100644 index 0000000..8f5a27f --- /dev/null +++ b/app/src/main/java/com/github/omadahealth/lollipin/NotificationPublisher.java @@ -0,0 +1,21 @@ +package com.github.omadahealth.lollipin; + +import android.app.Notification; +import android.app.NotificationManager; +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; + +public class NotificationPublisher extends BroadcastReceiver { + public static String NOTIFICATION_ID = "notification-id"; + public static String NOTIFICATION = "notification"; + + public void onReceive(Context context, Intent intent) { + + NotificationManager notificationManager = (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE); + Notification notification = intent.getParcelableExtra(NOTIFICATION); + int id = intent.getIntExtra(NOTIFICATION_ID, 0); + notificationManager.notify(id, notification); + + } +} diff --git a/app/src/main/java/com/github/omadahealth/lollipin/LockedCompatActivity.java b/app/src/main/java/com/github/omadahealth/lollipin/TimerActivity.java similarity index 61% rename from app/src/main/java/com/github/omadahealth/lollipin/LockedCompatActivity.java rename to app/src/main/java/com/github/omadahealth/lollipin/TimerActivity.java index adb6c0d..0774daa 100644 --- a/app/src/main/java/com/github/omadahealth/lollipin/LockedCompatActivity.java +++ b/app/src/main/java/com/github/omadahealth/lollipin/TimerActivity.java @@ -1,84 +1,41 @@ package com.github.omadahealth.lollipin; -// -import android.os.Bundle; -import android.support.v7.widget.Toolbar; -import com.github.omadahealth.lollipin.lib.PinCompatActivity; -import lollipin.orangegangsters.github.com.lollipin.R; -// -///** -// * Created by callmepeanut on 16-1-14. -// */ -//public class LockedCompatActivity extends PinCompatActivity{ -// -// @Override -// protected void onCreate(Bundle savedInstanceState) { -// super.onCreate(savedInstanceState); -// setContentView(R.layout.activity_compat_locked); -// initView(); -// } -// -// private void initView() { -//// // Toolbar toolbar = (Toolbar) findViewById(R.id.id_toolbar); -//// setSupportActionBar(toolbar); -//// -//// toolbar.setTitle("Title"); -//// toolbar.setTitleTextColor(getResources().getColor(android.R.color.white)); -//// toolbar.setSubtitle("SubTitle"); -//// toolbar.setSubtitleTextColor(getResources().getColor(android.R.color.white)); -//// toolbar.setLogo(R.drawable.ic_launcher); -//// toolbar.setNavigationIcon(R.drawable.ic_menu_white_36dp); -// } -//} - - - import android.app.AlarmManager; import android.app.Notification; -import android.app.NotificationChannel; -import android.app.NotificationManager; import android.app.PendingIntent; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.SharedPreferences; -import android.graphics.Color; -import android.media.MediaPlayer; -import android.net.wifi.WifiManager; import android.os.Build; +import android.os.Bundle; import android.os.CountDownTimer; -import android.os.SystemClock; import android.os.Vibrator; -import android.preference.EditTextPreference; import android.preference.PreferenceManager; -import android.support.annotation.NonNull; import android.support.annotation.RequiresApi; -//import android.support.design.widget.NavigationView; -import android.support.v4.app.NotificationCompat; +import android.support.design.widget.NavigationView; import android.support.v4.widget.DrawerLayout; import android.support.v7.app.ActionBar; import android.support.v7.app.ActionBarDrawerToggle; import android.support.v7.app.AlertDialog; -import android.support.v7.app.AppCompatActivity; -import android.os.Bundle; -import android.util.Log; +import android.view.Gravity; import android.view.Menu; import android.view.MenuItem; import android.view.View; -import android.widget.EditText; import android.widget.ImageView; import android.widget.ProgressBar; -import android.widget.RelativeLayout; import android.widget.TextView; import android.widget.Toast; - +import com.github.omadahealth.lollipin.lib.PinCompatActivity; +import com.github.omadahealth.todo.MainActivity; +import com.github.omadahealth.todo.addCategory; import java.util.concurrent.TimeUnit; -//import static com.nazlcanozturk46.pomodoro.R.drawable.actionbar_background; +import lollipin.orangegangsters.github.com.lollipin.R; -public class LockedCompatActivity extends PinCompatActivity implements View.OnClickListener, SharedPreferences.OnSharedPreferenceChangeListener { +public class TimerActivity extends PinCompatActivity implements View.OnClickListener, SharedPreferences.OnSharedPreferenceChangeListener { private long timeCountInMilliSeconds = 1 * 60000; @Override @@ -98,7 +55,6 @@ public class LockedCompatActivity extends PinCompatActivity implements View.OnCl private ProgressBar progressBarCircle; private TextView textViewTime; private ImageView imageViewReset; - private ImageView imageViewStartStop; private ImageView imageViewTomato, imageViewWork, imageViewBreak; private ImageView imageViewPomodora1, imageViewPomodora2, imageViewPomodora3, imageViewPomodora4; private CountDownTimer countDownTimer; @@ -107,16 +63,15 @@ public class LockedCompatActivity extends PinCompatActivity implements View.OnCl private Vibrator vibrator; //hamburger menu - //private DrawerLayout drawerLayout; - // private ActionBarDrawerToggle actionBarDrawerToggle; - // private NavigationView navigationView; + private DrawerLayout drawerLayout; + private ActionBarDrawerToggle actionBarDrawerToggle; ImageView imageViewPic; TextView textViewName,textViewEmail; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - setContentView(R.layout.activity_compat_locked); + setContentView(R.layout.timer_activity); // method call to initialize the views initViews(); @@ -124,25 +79,11 @@ public class LockedCompatActivity extends PinCompatActivity implements View.OnCl //Set vibrate feature vibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE); - //Toggle menu -// actionBarDrawerToggle = new ActionBarDrawerToggle(this, drawerLayout, R.string.open, R.string.close); -//// drawerLayout.setDrawerListener(actionBarDrawerToggle); -// actionBarDrawerToggle.syncState(); -// getSupportActionBar().setDisplayHomeAsUpEnabled(true); - - //Taking Navigation menu settings -// navigationClick(); - settings = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); //Taking to feature from the setting menu loadSettings(); - //ActionBar set -// ActionBar actionBar = getSupportActionBar(); -// actionBar.setTitle("Pomodoro"); -// actionBar.setBackgroundDrawable(getResources().getDrawable(R.drawable.actionbar_background)); - // method call to initialize the listeners initListeners(); //method call to initialize the settings menu item @@ -150,42 +91,30 @@ public class LockedCompatActivity extends PinCompatActivity implements View.OnCl } - /** - * method to Navigation menu settings - */ -// public void navigationClick() { -// navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() { -// @Override -// public boolean onNavigationItemSelected(MenuItem item) { -// -// if (item.getItemId() == R.id.settings) { -// Intent settingsIntent = new Intent(getApplicationContext(), Settings.class); -// startActivity(settingsIntent); -// } else if (item.getItemId() == R.id.about) { -// Intent aboutIntent = new Intent(getApplicationContext(), AboutPomodoro.class); -// startActivity(aboutIntent); -// -// } else if (item.getItemId() == R.id.share) { -// Intent shareIntent = new Intent(Intent.ACTION_SEND); -// shareIntent.setType("Text/Plain"); -// String shareBody = "There are many improvements you can experience from successfully implementing the pomodoro technique into your life, making it one of your good habits. Here are some of the improvements you will see;\n" + "\n" + -// "Increased productivity.\n" + -// "Improved quality and quantity of work.\n" + -// "Better time management.\n" + -// "Strengthened focus and motivation.\n" + -// "The ability to stay fresh throughout the work day."; -// String shareSub = "Focus with Pomodoro"; -// shareIntent.putExtra(Intent.EXTRA_TEXT, shareBody); -// shareIntent.putExtra(Intent.EXTRA_SUBJECT, shareSub); -// startActivity(Intent.createChooser(shareIntent, "Share Using")); -// } else if (item.getItemId() == R.id.account) { -// Intent accountIntent = new Intent(getApplicationContext(), Facebook.class); -// startActivity(accountIntent); -// } -// return false; -// } -// }); -// } + public void settings(View V) { + DrawerLayout mDrawerLayout = (DrawerLayout) findViewById(R.id.drawerLayout); + mDrawerLayout.openDrawer(Gravity.LEFT); + } + + public void closeMenu(View v) { + DrawerLayout d = ((DrawerLayout) findViewById(R.id.drawerLayout)); + d.closeDrawers(); + } + + public void goToToDoList(View view) { + Intent intentMain = new Intent(TimerActivity.this, MainActivity.class); + startActivityForResult(intentMain, 2); + } + + public void goToSettins(View view) { + Intent intentMain = new Intent(TimerActivity.this, TimerSettings.class); + startActivityForResult(intentMain, 2); + } + + public void goToAbout(View view) { + Intent intentMain = new Intent(TimerActivity.this, AboutPomocnik.class); + startActivityForResult(intentMain, 2); + } /** * method to initialize the settings menu item @@ -199,20 +128,18 @@ public class LockedCompatActivity extends PinCompatActivity implements View.OnCl * Method to take settings from the setting menu */ private void loadSettings() { - vibration = settings.getBoolean("vibration", false); - settings.registerOnSharedPreferenceChangeListener(LockedCompatActivity.this); + //vibration = settings.getBoolean("vibration", false); + settings.registerOnSharedPreferenceChangeListener(TimerActivity.this); } /** * method to initialize the views */ private void initViews() { - //drawerLayout = findViewById(R.id.drawerLayout); - //navigationView = findViewById(R.id.navigation_view); + drawerLayout = findViewById(R.id.drawerLayout); progressBarCircle = findViewById(R.id.progressBarCircle); textViewTime = findViewById(R.id.textViewTime); imageViewReset = findViewById(R.id.imageViewReset); - imageViewStartStop = findViewById(R.id.imageViewStartStop); imageViewTomato = findViewById(R.id.imageViewTomato); imageViewBreak = findViewById(R.id.imageViewBreak); imageViewWork = findViewById(R.id.imageViewWork); @@ -223,7 +150,6 @@ public class LockedCompatActivity extends PinCompatActivity implements View.OnCl */ private void initListeners() { imageViewReset.setOnClickListener(this); - imageViewStartStop.setOnClickListener(this); imageViewTomato.setOnClickListener(this); } @@ -238,9 +164,6 @@ public class LockedCompatActivity extends PinCompatActivity implements View.OnCl case R.id.imageViewReset: reset(); break; - case R.id.imageViewStartStop: - workstartStop(); - break; case R.id.imageViewTomato: visibleButton(); workstartStop(); @@ -252,13 +175,30 @@ public class LockedCompatActivity extends PinCompatActivity implements View.OnCl * method to visible start stop icon */ public void visibleButton() { - imageViewStartStop.setVisibility(View.VISIBLE); + imageViewTomato.setVisibility(View.GONE); } /** * method to reset count down timer */ + private void resetAfterBreak() { + breakCount = 0; + stopCountDownTimer(); + //startCountDownTimer(); + textViewTime.setText(hmsTimeFormatter(timeCountInMilliSeconds)); + // call to initialize the progress bar values + setProgressBarValues(); + //hiding break and work icon + imageViewBreak.setVisibility(View.GONE); + imageViewWork.setVisibility(View.GONE); + imageViewTomato.setVisibility(View.VISIBLE); + // changing the timer status to stopped + timerStatus = TimerStatus.STOPPED; + + } + + private void reset() { breakCount = 0; stopCountDownTimer(); @@ -269,12 +209,15 @@ public class LockedCompatActivity extends PinCompatActivity implements View.OnCl //hiding break and work icon imageViewBreak.setVisibility(View.GONE); imageViewWork.setVisibility(View.GONE); - // changing stop icon to start icon - imageViewStartStop.setImageResource(R.mipmap.icon_start); // changing the timer status to stopped timerStatus = TimerStatus.STOPPED; - } + //vibration = settings.getBoolean("vibration", true); + vibration = true; + if (vibration) vibrator.vibrate(1000); + //checking work and break times + checkBreakOrWork(); + } /** * method to start and stop count down timer @@ -292,8 +235,6 @@ public class LockedCompatActivity extends PinCompatActivity implements View.OnCl imageViewWork.setVisibility(View.VISIBLE); // showing the reset icon imageViewReset.setVisibility(View.VISIBLE); - // changing play icon to stop icon - imageViewStartStop.setImageResource(R.mipmap.icon_pause); // changing the timer status to started timerStatus = TimerStatus.STARTED; // call to start the count down timer @@ -301,8 +242,6 @@ public class LockedCompatActivity extends PinCompatActivity implements View.OnCl } else { - // changing stop icon to start icon - imageViewStartStop.setImageResource(R.mipmap.icon_start); // changing the timer status to stopped timerStatus = TimerStatus.STOPPED; stopCountDownTimer(); @@ -359,22 +298,20 @@ public class LockedCompatActivity extends PinCompatActivity implements View.OnCl imageViewWork.setVisibility(View.GONE); // hiding the break icon imageViewBreak.setVisibility(View.GONE); - // changing stop icon to start icon - imageViewStartStop.setImageResource(R.mipmap.icon_start); // changing the timer status to stopped timerStatus = TimerStatus.STOPPED; //Vibration - vibration = settings.getBoolean("vibration", true); - + //vibration = settings.getBoolean("vibration", true); + vibration = true; if (vibration) vibrator.vibrate(1000); //checking work and break times checkBreakOrWork(); } }.start(); -// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { -// scheduleNotification(getNotification("Time is over!!"), timeCountInMilliSeconds); -// } + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + scheduleNotification(getNotification("Time is over!!"), timeCountInMilliSeconds); + } } /** @@ -383,22 +320,22 @@ public class LockedCompatActivity extends PinCompatActivity implements View.OnCl * @param notification * @param delay */ -// private void scheduleNotification(Notification notification, long delay) { -// if (Build.VERSION.SDK_INT < 26) { -// return; -// } -// -// Intent notificationIntent = new Intent(this, NotificationPublisher.class); -// notificationIntent.putExtra(NotificationPublisher.NOTIFICATION_ID, 1); -// notificationIntent.putExtra(NotificationPublisher.NOTIFICATION, notification); -// PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT); -// -// long futureInMillis = System.currentTimeMillis() + delay; -// -// AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); -// alarmManager.setExact(AlarmManager.RTC_WAKEUP, futureInMillis, pendingIntent); -// -// } + private void scheduleNotification(Notification notification, long delay) { + if (Build.VERSION.SDK_INT < 26) { + return; + } + + Intent notificationIntent = new Intent(this, NotificationPublisher.class); + notificationIntent.putExtra(NotificationPublisher.NOTIFICATION_ID, 1); + notificationIntent.putExtra(NotificationPublisher.NOTIFICATION, notification); + PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT); + + long futureInMillis = System.currentTimeMillis() + delay; + + AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); + alarmManager.setExact(AlarmManager.RTC_WAKEUP, futureInMillis, pendingIntent); + + } /** @@ -406,9 +343,9 @@ public class LockedCompatActivity extends PinCompatActivity implements View.OnCl */ @RequiresApi(api = Build.VERSION_CODES.O) private Notification getNotification(String content) { - Intent notificationIntent = new Intent(this, MainActivity.class); - //notificationIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); - //notificationIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + Intent notificationIntent = new Intent(this, TimerActivity.class); + notificationIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); + notificationIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT); Notification builder = new Notification.Builder(this, "default") @@ -435,6 +372,7 @@ public class LockedCompatActivity extends PinCompatActivity implements View.OnCl // System.out.println("************************ work"); } else { Toast.makeText(getApplicationContext(), "Finish", Toast.LENGTH_LONG).show(); + } } else { Toast.makeText(getApplicationContext(), "Pomodoro is over", Toast.LENGTH_LONG).show(); @@ -448,7 +386,7 @@ public class LockedCompatActivity extends PinCompatActivity implements View.OnCl * method to show alert take a break */ public void breakAlert() { - AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(LockedCompatActivity.this); + AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(TimerActivity.this); alertDialogBuilder.setMessage("Good job! Would you like to take a break"); alertDialogBuilder.setPositiveButton("No", new DialogInterface.OnClickListener() { @@ -474,7 +412,7 @@ public class LockedCompatActivity extends PinCompatActivity implements View.OnCl * method to show alert take a break */ public void workAlert() { - AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(LockedCompatActivity.this); + AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(TimerActivity.this); alertDialogBuilder.setMessage("The break is over! Now working time"); alertDialogBuilder.setPositiveButton("Continue", new DialogInterface.OnClickListener() { @Override @@ -486,7 +424,7 @@ public class LockedCompatActivity extends PinCompatActivity implements View.OnCl alertDialogBuilder.setNegativeButton("Finish", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { - reset(); + resetAfterBreak(); } }); @@ -510,9 +448,6 @@ public class LockedCompatActivity extends PinCompatActivity implements View.OnCl imageViewBreak.setVisibility(View.VISIBLE); // showing the reset icon imageViewReset.setVisibility(View.VISIBLE); - // changing play icon to stop icon - imageViewStartStop.setImageResource(R.mipmap.icon_pause); - // making edit text not editable // changing the timer status to started timerStatus = TimerStatus.STARTED; // call to start the count down timer @@ -520,14 +455,10 @@ public class LockedCompatActivity extends PinCompatActivity implements View.OnCl } else { breakCount = 0; - // changing stop icon to start icon - imageViewStartStop.setImageResource(R.mipmap.icon_start); // changing the timer status to stopped timerStatus = TimerStatus.STOPPED; stopCountDownTimer(); - } - } /** @@ -564,34 +495,10 @@ public class LockedCompatActivity extends PinCompatActivity implements View.OnCl } - @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_main, menu); return true; } - - /** - * method to get profile pic. and name - */ - - -// @Override -// public boolean onOptionsItemSelected(MenuItem item) { -// if (actionBarDrawerToggle.onOptionsItemSelected(item)) { -// return true; -// } -// if (item.getItemId() == R.id.action_settings) { -// Intent settingsIntent = new Intent(getApplicationContext(), Settings.class); -// startActivity(settingsIntent); -// return true; -// } -// if (item.getItemId() == R.id.question) { -// Intent questionIntent = new Intent(getApplicationContext(), Questions.class); -// startActivity(questionIntent); -// return true; -// } -// return super.onOptionsItemSelected(item); -// } } diff --git a/app/src/main/java/com/github/omadahealth/lollipin/NotLockedActivity.java b/app/src/main/java/com/github/omadahealth/lollipin/TimerSettings.java similarity index 57% rename from app/src/main/java/com/github/omadahealth/lollipin/NotLockedActivity.java rename to app/src/main/java/com/github/omadahealth/lollipin/TimerSettings.java index a67beb0..331d658 100644 --- a/app/src/main/java/com/github/omadahealth/lollipin/NotLockedActivity.java +++ b/app/src/main/java/com/github/omadahealth/lollipin/TimerSettings.java @@ -1,19 +1,20 @@ package com.github.omadahealth.lollipin; -import android.app.Activity; import android.os.Bundle; +import android.preference.PreferenceActivity; import lollipin.orangegangsters.github.com.lollipin.R; /** - * Created by oliviergoutay on 1/13/15. + * Created by nazlican on 17.12.2017. */ -public class NotLockedActivity extends Activity { + +public class TimerSettings extends PreferenceActivity { + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - setContentView(R.layout.activity_not_locked); + addPreferencesFromResource(R.xml.settings); } - } diff --git a/app/src/main/java/com/github/omadahealth/todo/AddItem.java b/app/src/main/java/com/github/omadahealth/todo/AddItem.java new file mode 100644 index 0000000..4168dd2 --- /dev/null +++ b/app/src/main/java/com/github/omadahealth/todo/AddItem.java @@ -0,0 +1,223 @@ +package com.github.omadahealth.todo; + +import android.app.Activity; +import android.app.DatePickerDialog; +import android.app.Dialog; +import android.app.TimePickerDialog; +import android.content.Intent; +import android.os.Bundle; +import android.support.v7.app.AppCompatActivity; +import android.view.View; +import android.widget.AdapterView; +import android.widget.ArrayAdapter; +import android.widget.DatePicker; +import android.widget.Spinner; +import android.widget.TextView; +import android.widget.TimePicker; +import android.widget.Toast; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +import lollipin.orangegangsters.github.com.lollipin.R; + +import static lollipin.orangegangsters.github.com.lollipin.R.id.date; + +/** + * Lorsqu'on ajoute une task + */ +public class AddItem extends AppCompatActivity { + private Calendar calendar; + public Spinner spinner2; + private TextView dateView, timeView; + private int year, month, day, hour, minute; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_add_item); + dateView = (TextView) findViewById(date); + timeView = (TextView) findViewById(R.id.time); + calendar = Calendar.getInstance(); + year = calendar.get(Calendar.YEAR); + + month = calendar.get(Calendar.MONTH); + day = calendar.get(Calendar.DAY_OF_MONTH); + hour = calendar.get(Calendar.HOUR_OF_DAY); + minute = calendar.get(Calendar.MINUTE); + try { + showDate(year, month + 1, day); + } catch (ParseException e) { + e.printStackTrace(); + } + showTime(hour, minute); + spinner2 = (Spinner) findViewById(R.id.spinner2); + addItemsOnSpinner2(); + } + + /** + * Ajoute les catégories dans le spinner + */ + public void addItemsOnSpinner2() { + List list = new ArrayList<>(); + int i = 0; + while (i < MainActivity.getCat().size()) { + list.add(MainActivity.getCat().get(i).getName()); + i++; + } + ArrayAdapter dataAdapter = new ArrayAdapter<>(this, + android.R.layout.simple_spinner_item, list); + dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + spinner2.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { + @Override + public void onItemSelected(AdapterView parent, View view, int position, long id) { + findViewById(R.id.textBar).setBackgroundColor(MainActivity.getCat().get(position).getColor()); + findViewById(R.id.title).setBackgroundColor(MainActivity.getCat().get(position).getColor()); + } + + @Override + public void onNothingSelected(AdapterView parent) { + + } + + }); + spinner2.setAdapter(dataAdapter); + } + + @SuppressWarnings("deprecation") + /** + * Set la date + * @param view View + */ + public void setDate(View view) { + showDialog(999); + } + + /** + * Set l'heure + * @param view View + */ + public void setTime(View view) { + showDialog(998); + } + + @Override + protected Dialog onCreateDialog(int id) { + // TODO Auto-generated method stub + if (id == 999) { + return new DatePickerDialog(this, + myDateListener, year, month, day); + } + + if (id == 998) { + return new TimePickerDialog(this, myTimeListener, hour, minute, true); + } + return null; + } + + /** + * Ouvre un picker de date + */ + private DatePickerDialog.OnDateSetListener myDateListener = new + DatePickerDialog.OnDateSetListener() { + @Override + public void onDateSet(DatePicker arg0, + int arg1, int arg2, int arg3) { + // TODO Auto-generated method stub + // arg1 = year + // arg2 = month + // arg3 = day + try { + showDate(arg1, arg2 + 1, arg3); + } catch (ParseException e) { + e.printStackTrace(); + } + } + }; + /** + * Ouvre un picker d'heure + */ + private TimePickerDialog.OnTimeSetListener myTimeListener = new + TimePickerDialog.OnTimeSetListener() { + @Override + public void onTimeSet(TimePicker arg0, + int arg1, int arg2) { + // TODO Auto-generated method stub + // arg1 = year + // arg2 = month + // arg3 = day + showTime(arg1, arg2); + } + }; + + /** + * Affiche la date choisie + * @param year année + * @param month mois + * @param day jour + * @throws ParseException + */ + private void showDate(int year, int month, int day) throws ParseException { + String d = (String.format("%02d", day) + "/" + String.format("%02d", month) + "/" + year); + SimpleDateFormat newDateFormat = new SimpleDateFormat("dd/MM/yyyy"); + Date MyDate = newDateFormat.parse(d); + newDateFormat.applyPattern("EE d MMM yyyy"); + String MySDate = newDateFormat.format(MyDate); + dateView.setText(MySDate); + + } + + /** + * Affiche le temps dans la text view time + * @param hour heure + * @param minute minute + */ + private void showTime(int hour, int minute) { + timeView.setText(String.format("%02d", hour) + ":" + String.format("%02d", minute)); + } + + /** + * Ferme la vue + * @param view view + */ + public void cancel(View view) + { + Intent returnIntent = new Intent(); + setResult(Activity.RESULT_CANCELED,returnIntent); + finish(); + } + + /** + * Sauvegarde l'item et envoies les données à la Mainactivity + * @param view view + * @throws ParseException + */ + public void save(View view) throws ParseException { + Date current = new Date(); + String title = ((TextView) findViewById(R.id.title)).getText().toString(); + String txt = ((TextView) findViewById(R.id.txt)).getText().toString().replace('<', ' '); + if (title.equals("") || txt.equals("")) + Toast.makeText(getApplicationContext(), "Error title and description cannot be empty !", Toast.LENGTH_SHORT).show(); + else { + String d = ((TextView) findViewById(R.id.date)).getText().toString() + " " + ((TextView) findViewById(R.id.time)).getText().toString(); + SimpleDateFormat newDateFormat = new SimpleDateFormat("EE d MMM yyyy k:m"); + Date date = newDateFormat.parse(d); + String categorie = String.valueOf(spinner2.getSelectedItem()); + if (date.after(current)) { + Intent returnIntent = new Intent(); + returnIntent.putExtra("title", title); + returnIntent.putExtra("txt", txt); + returnIntent.putExtra("date", d); + returnIntent.putExtra("categorie", categorie); + returnIntent.putExtra("edit", "false"); + setResult(Activity.RESULT_OK, returnIntent); + finish(); + } else + Toast.makeText(getApplicationContext(), "Error you can't enter a date that is already passed !", Toast.LENGTH_SHORT).show(); + } + } +} diff --git a/app/src/main/java/com/github/omadahealth/todo/CatAdapter.java b/app/src/main/java/com/github/omadahealth/todo/CatAdapter.java new file mode 100644 index 0000000..17db7fc --- /dev/null +++ b/app/src/main/java/com/github/omadahealth/todo/CatAdapter.java @@ -0,0 +1,49 @@ +package com.github.omadahealth.todo; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ArrayAdapter; +import android.widget.TextView; + +import java.util.List; + +import lollipin.orangegangsters.github.com.lollipin.R; + +/** + * Le custom adapteur pour la listview catégorie + */ + +public class CatAdapter extends ArrayAdapter { + public CatAdapter(Context context, List Categorie) { + super(context, 0, Categorie); + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + + if (convertView == null) { + convertView = LayoutInflater.from(getContext()).inflate(R.layout.row_category, parent, false); + } + CatAdapter.CatHolder viewHolder = (CatHolder) convertView.getTag(); + if (viewHolder == null) { + viewHolder = new CatAdapter.CatHolder(); + viewHolder.name = (TextView) convertView.findViewById(R.id.title); + viewHolder.color = (TextView) convertView.findViewById(R.id.color); + convertView.setTag(viewHolder); + } + Categorie cat = getItem(position); + if (cat != null) { + viewHolder.name.setText(cat.getName()); + viewHolder.color.setBackgroundColor(cat.getColor()); + } + return convertView; + } + + private class CatHolder { + public TextView name; + public TextView color; + } + +} diff --git a/app/src/main/java/com/github/omadahealth/todo/Categorie.java b/app/src/main/java/com/github/omadahealth/todo/Categorie.java new file mode 100644 index 0000000..5df038f --- /dev/null +++ b/app/src/main/java/com/github/omadahealth/todo/Categorie.java @@ -0,0 +1,75 @@ +package com.github.omadahealth.todo; + +/** + * Classe catégorie + */ + +public class Categorie { + private String name; + private int color; + private boolean show; + + /** + * Constructeur + * @param n nom + * @param c couleur + */ + public Categorie(String n, int c) + { + this.name = n; + this.color = c; + show = true; + } + + /** + * Renvoie le nom de la catégorie + * @return nom de la catégorie + */ + public String getName() + { + return (this.name); + } + + /** + * Renvoies la couleur de la catégorie + * @return couleur de la catégorie + */ + public int getColor() + { + return (this.color); + } + + /** + * Set le nom de la catégorie + * @param n nom + */ + public void setName(String n) + { + this.name = n; + } + + /** + * Set la couleur + * @param c couleur + */ + public void setColor(int c) + { + this.color = c; + } + + /** + * Pemret de savoir si la catégorie doit être affichée + * @return boolean affichage de la catgorie + */ + public boolean getShow() { + return this.show; + } + + /** + * Set la catégorie en visible ou invible + * @param show1 true ou false + */ + public void setShow(boolean show1) { + this.show = show1; + } +} diff --git a/app/src/main/java/com/github/omadahealth/todo/EditItem.java b/app/src/main/java/com/github/omadahealth/todo/EditItem.java new file mode 100644 index 0000000..81e062c --- /dev/null +++ b/app/src/main/java/com/github/omadahealth/todo/EditItem.java @@ -0,0 +1,256 @@ +package com.github.omadahealth.todo; + +import android.app.Activity; +import android.app.DatePickerDialog; +import android.app.Dialog; +import android.app.TimePickerDialog; +import android.content.Intent; +import android.os.Bundle; +import android.support.v7.app.AppCompatActivity; +import android.view.View; +import android.widget.AdapterView; +import android.widget.ArrayAdapter; +import android.widget.DatePicker; +import android.widget.RelativeLayout; +import android.widget.Spinner; +import android.widget.TextView; +import android.widget.TimePicker; +import android.widget.Toast; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +import lollipin.orangegangsters.github.com.lollipin.R; + +/** + * Lorsqu'une task est éditée + */ +public class EditItem extends AppCompatActivity { + + int year, month, day, hour, minute; + boolean cancel; + Spinner spinner2; + String previousDate; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + cancel = false; + setContentView(R.layout.activity_edit_item); + String title = getIntent().getStringExtra("title"); + String txt = getIntent().getStringExtra("txt"); + String date = getIntent().getStringExtra("date"); + String time = getIntent().getStringExtra("time"); + previousDate = date + " " + time; + String categorie = getIntent().getStringExtra("categorie"); + spinner2 = (Spinner) findViewById(R.id.spinner2); + addItemsOnSpinner2(); + int i = 0; + int selection = 0; + while (i < MainActivity.getCat().size()) { + if (categorie.equals(MainActivity.getCat().get(i).getName())) { + ((RelativeLayout) findViewById(R.id.textBar)).setBackgroundColor(MainActivity.getCat().get(i).getColor()); + ((RelativeLayout) findViewById(R.id.textBar1)).setBackgroundColor(MainActivity.getCat().get(i).getColor()); + ((TextView) findViewById(R.id.title)).setBackgroundColor(MainActivity.getCat().get(i).getColor()); + selection = i; + } + i++; + } + spinner2.setSelection(selection); + ((TextView) findViewById(R.id.time2)).setText(time); + ((TextView) findViewById(R.id.date2)).setText(date); + ((TextView) findViewById(R.id.title)).setText(title); + ((TextView) findViewById(R.id.txt)).setText(txt); + } + + /** + * Ajoute les catégories dans le spinner + */ + public void addItemsOnSpinner2() { + List list = new ArrayList(); + int i = 0; + while (i < MainActivity.getCat().size()) { + list.add(MainActivity.getCat().get(i).getName()); + i++; + } + ArrayAdapter dataAdapter = new ArrayAdapter(this, + android.R.layout.simple_spinner_item, list); + dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + spinner2.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { + @Override + public void onItemSelected(AdapterView parent, View view, int position, long id) { + ((RelativeLayout) findViewById(R.id.textBar)).setBackgroundColor(MainActivity.getCat().get(position).getColor()); + ((RelativeLayout) findViewById(R.id.textBar1)).setBackgroundColor(MainActivity.getCat().get(position).getColor()); + ((TextView) findViewById(R.id.title)).setBackgroundColor(MainActivity.getCat().get(position).getColor()); + } + + @Override + public void onNothingSelected(AdapterView parent) { + + } + + }); + spinner2.setAdapter(dataAdapter); + } + + /** + * Set la date + * @param view + */ + public void setDate(View view) { + showDialog(999); + } + + /** + * set l'heure + * @param view + */ + public void setTime(View view) { + showDialog(998); + } + + @Override + protected Dialog onCreateDialog(int id) { + // TODO Auto-generated method stub + if (id == 999) { + return new DatePickerDialog(this, + myDateListener, year, month, day); + } + + if (id == 998) { + return new TimePickerDialog(this, myTimeListener, hour, minute, true); + } + return null; + } + + private DatePickerDialog.OnDateSetListener myDateListener = new + DatePickerDialog.OnDateSetListener() { + @Override + public void onDateSet(DatePicker arg0, + int arg1, int arg2, int arg3) { + // TODO Auto-generated method stub + // arg1 = year + // arg2 = month + // arg3 = day + try { + showDate(arg1, arg2 + 1, arg3); + } catch (ParseException e) { + e.printStackTrace(); + } + } + }; + private TimePickerDialog.OnTimeSetListener myTimeListener = new + TimePickerDialog.OnTimeSetListener() { + @Override + public void onTimeSet(TimePicker arg0, + int arg1, int arg2) { + // TODO Auto-generated method stub + // arg1 = year + // arg2 = month + // arg3 = day + showTime(arg1, arg2); + } + }; + + /** + * Aaffiche la date + * @param year + * @param month + * @param day + * @throws ParseException + */ + private void showDate(int year, int month, int day) throws ParseException { + String d = (String.format("%02d", day) + "/" + String.format("%02d", month) + "/" + year); + SimpleDateFormat newDateFormat = new SimpleDateFormat("dd/MM/yyyy"); + Date MyDate = newDateFormat.parse(d); + newDateFormat.applyPattern("EE d MMM yyyy"); + String MySDate = newDateFormat.format(MyDate); + ((TextView) findViewById(R.id.date2)).setText(MySDate); + } + + /** + * Affiche l'heure + * @param hour + * @param minute + */ + private void showTime(int hour, int minute) { + ((TextView) findViewById(R.id.time2)).setText(String.format("%02d", hour) + ":" + String.format("%02d", minute)); + } + /** + * Supprime la tache + * @param v + */ + public void delete(View v) { + final Dialog dialog = new Dialog(this); + dialog.setContentView(R.layout.delete_task); + dialog.findViewById(R.id.cancel).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + dialog.dismiss(); + } + }); + dialog.findViewById(R.id.yes).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + String title = ((TextView) findViewById(R.id.title)).getText().toString(); + String txt = ((TextView) findViewById(R.id.txt)).getText().toString(); + String d = ((TextView) findViewById(R.id.date2)).getText().toString() + " " + ((TextView) findViewById(R.id.time2)).getText().toString(); + Intent returnIntent = new Intent(); + returnIntent.putExtra("title", title); + returnIntent.putExtra("txt", txt); + returnIntent.putExtra("date", d); + returnIntent.putExtra("edit", "true"); + returnIntent.putExtra("position", getIntent().getStringExtra("position")); + returnIntent.putExtra("categorie", "null"); + returnIntent.putExtra("delete", "true"); + setResult(Activity.RESULT_OK, returnIntent); + finish(); + + } + }); + dialog.show(); + } + + /** + * Enregistre les modifications + * @param v + * @throws ParseException + */ + public void save(View v) throws ParseException { + Date current = new Date(); + String title = ((TextView) findViewById(R.id.title)).getText().toString(); + String txt = ((TextView) findViewById(R.id.txt)).getText().toString().replace('<', ' '); + String d = ((TextView) findViewById(R.id.date2)).getText().toString() + " " + ((TextView) findViewById(R.id.time2)).getText().toString(); + String categorie = String.valueOf(spinner2.getSelectedItem()); + SimpleDateFormat newDateFormat = new SimpleDateFormat("EE d MMM yyyy k:m"); + Date date = newDateFormat.parse(d); + Date oldDate = newDateFormat.parse(previousDate); + if (date.after(current) || date.equals(oldDate)) { + Intent returnIntent = new Intent(); + returnIntent.putExtra("title", title); + returnIntent.putExtra("txt", txt); + returnIntent.putExtra("date", d); + returnIntent.putExtra("edit", "true"); + returnIntent.putExtra("position", getIntent().getStringExtra("position")); + returnIntent.putExtra("categorie", categorie); + returnIntent.putExtra("delete", "false"); + setResult(Activity.RESULT_OK, returnIntent); + finish(); + } + else + Toast.makeText(getApplicationContext(), "Error you can't enter a date that is already passed !", Toast.LENGTH_SHORT).show(); + } + + /** + * Ferme la vue + * @param v + */ + public void cancel(View v) { + Intent returnIntent = new Intent(); + setResult(Activity.RESULT_CANCELED, returnIntent); + finish(); + } +} diff --git a/app/src/main/java/com/github/omadahealth/todo/Item.java b/app/src/main/java/com/github/omadahealth/todo/Item.java new file mode 100644 index 0000000..36d3469 --- /dev/null +++ b/app/src/main/java/com/github/omadahealth/todo/Item.java @@ -0,0 +1,214 @@ +package com.github.omadahealth.todo; + +import java.text.SimpleDateFormat; +import java.util.Date; + +/** + * Classe Item + */ + + +public class Item { + private String title; + private String text; + private boolean passed; + private Date dueDate; + private Status status; + private String dateColor; + private String categorie; + public enum Status {TODO, DONE} + + /** + * Constructeur + * @param title titre + * @param text descritpion + * @param dueDate date + */ + public Item(String title, String text, Date dueDate) + { + this.title = title; + this.text = text; + this.passed = false; + this.dueDate = dueDate; + this.status = Status.TODO; + this.dateColor = "#AFAFAF"; + this.categorie = "none"; + } + + /** + * Set la couleur de la date + * @param c couleur + */ + public void setDateColor(String c) + { + this.dateColor = c; + } + + /** + * Renvoie la couleur de la date + * @return la couleur de la date + */ + public String getDateColor() + { + return this.dateColor; + } + + /** + * Renvoie le titre de la task + * @return le titre + */ + public String getTitle() + { + return (this.title); + } + + /** + * Set le titre de la task + * @param title le titre + */ + public void setTitle(String title) + { + this.title = title; + } + + /** + * Renvoies la description de la task + * @return la description + */ + public String getText() + { + return (this.text); + } + + /** + * Set la description de la tache + * @param text la description + */ + public void setText(String text) + { + this.text = text; + } + + public String getDueDate() + { + SimpleDateFormat newDateFormat = new SimpleDateFormat("dd/MM/yyyy\nHH:mm"); + String MySDate = "due till " + newDateFormat.format(this.dueDate); + return MySDate; + } + + /** + * Renvoies la date au format EE d MMM yyyy + * @return la date au format EE d MMM yyyy + */ + public String getDate() + { + SimpleDateFormat newDateFormat = new SimpleDateFormat("EE d MMM yyyy"); + String MySDate = newDateFormat.format(this.dueDate); + return MySDate; + } + + /** + * Renvoie l'heure au format HH:mm + * @return l'heure au format HH:mm + */ + public String getTime() + { + SimpleDateFormat newDateFormat = new SimpleDateFormat("HH:mm"); + String MySDate = newDateFormat.format(this.dueDate); + return MySDate; + } + + /** + * Renvoies la date au format dd/MM + * @return la date au format dd/MM + */ + public String getMonth() + { + SimpleDateFormat newDateFormat = new SimpleDateFormat("dd/MM"); + String MySDate = newDateFormat.format(this.dueDate); + return MySDate; + } + + /** + * Renvoies l'année au format yyyy + * @return l'année au format yyyy + */ + public String getYear() + { + SimpleDateFormat newDateFormat = new SimpleDateFormat("yyyy"); + String MySDate = newDateFormat.format(this.dueDate); + return MySDate; + } + + /** + * Renvoie la Date + * @return la Date + */ + public Date getRealDate() + { + return this.dueDate; + } + + /** + * Set la date + * @param dueDate la date + */ + + public void setDueDate(Date dueDate) + { + this.dueDate = dueDate; + } + + /** + * Renvoie le status de la tache + * @return ToDo ou Done + */ + public Status getStatus() + { + return (this.status); + } + + /** + * Renvoie si la tache est passée dans le temps + * @return true ou false + */ + public boolean getPassed() { + return this.passed; + } + + /** + * Set si la tache est passée dans le temps + * @param b true ou false + */ + public void setPassed(boolean b) + { + this.passed = b; + } + + /** + * Set le status de la tache + * @param status ToDo ou Done + */ + public void setStatus(Status status) + { + this.status = status; + } + + /** + * set la catégorie de la tache + * @param cat la catégorie + */ + public void setCategorie(String cat) + { + this.categorie = cat; + } + + /** + * Renvoie le nom de la catégorie de la tache + * @return le nom de la catégorie + */ + public String getCategorie() + { + return this.categorie; + } +} diff --git a/app/src/main/java/com/github/omadahealth/todo/ItemAdapter.java b/app/src/main/java/com/github/omadahealth/todo/ItemAdapter.java new file mode 100644 index 0000000..21b5f57 --- /dev/null +++ b/app/src/main/java/com/github/omadahealth/todo/ItemAdapter.java @@ -0,0 +1,106 @@ +package com.github.omadahealth.todo; + +import android.content.Context; +import android.graphics.Color; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ArrayAdapter; +import android.widget.LinearLayout; +import android.widget.ListView; +import android.widget.TextView; + +import java.util.ArrayList; +import java.util.List; + +import lollipin.orangegangsters.github.com.lollipin.R; + +/** + * Custom adaptateur pour les Items + */ + +public class ItemAdapter extends ArrayAdapter { + + public ItemAdapter(Context context, List Items) { + super(context, 0, Items); + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + + if (convertView == null) { + convertView = LayoutInflater.from(getContext()).inflate(R.layout.row_item, parent, false); + } + ItemViewHolder viewHolder = (ItemViewHolder) convertView.getTag(); + if (viewHolder == null) { + viewHolder = new ItemViewHolder(); + viewHolder.title = (TextView) convertView.findViewById(R.id.title); + viewHolder.text = (TextView) convertView.findViewById(R.id.text); + viewHolder.dateHour = (TextView) convertView.findViewById(R.id.dateHour); + viewHolder.dateMonth = (TextView) convertView.findViewById(R.id.dateMonth); + viewHolder.dateYear = (TextView) convertView.findViewById(R.id.dateYear); + viewHolder.categorie = (TextView) convertView.findViewById(R.id.categorie); + viewHolder.back = (LinearLayout) convertView.findViewById(R.id.back); + convertView.setTag(viewHolder); + } + Item Item = getItem(position); + final ArrayList cat = MainActivity.getCat(); + viewHolder.back.setBackgroundColor(Color.WHITE); + boolean found = false; + int i = 0; + while (i < cat.size()) { + if (Item.getCategorie().equals(cat.get(i).getName())) { + found = true; + int color = cat.get(i).getColor(); + String lighter = "#15" + Integer.toHexString(color).substring(2); + viewHolder.categorie.setBackgroundColor(cat.get(i).getColor()); + if (Item.getStatus() == com.github.omadahealth.todo.Item.Status.DONE) + viewHolder.back.setBackgroundColor(Color.parseColor(lighter)); + } + i++; + } + if (!found) + { + Item.setCategorie("none"); + int color = cat.get(0).getColor(); + String lighter = "#15" + Integer.toHexString(color).substring(2); + if (Item.getStatus() == com.github.omadahealth.todo.Item.Status.DONE) + viewHolder.back.setBackgroundColor(Color.parseColor(lighter)); + viewHolder.categorie.setBackgroundColor(cat.get(0).getColor()); + } + viewHolder.title.setText(Item.getTitle()); + viewHolder.dateHour.setTextColor(Color.parseColor(Item.getDateColor())); + viewHolder.dateMonth.setTextColor(Color.parseColor(Item.getDateColor())); + viewHolder.dateYear.setTextColor(Color.parseColor(Item.getDateColor())); + viewHolder.text.setText(Item.getText()); + viewHolder.dateMonth.setText(Item.getMonth()); + viewHolder.dateYear.setText(Item.getYear()); + viewHolder.dateHour.setText(Item.getTime()); + + return convertView; + } + + private class ItemViewHolder { + public TextView title; + public TextView text; + public TextView dateHour; + public TextView dateYear; + public TextView dateMonth; + public TextView categorie; + public LinearLayout back; + } + + public View getViewByPosition(int pos, ListView listView) { + final int firstListItemPosition = listView.getFirstVisiblePosition(); + final int lastListItemPosition = firstListItemPosition + listView.getChildCount() - 1; + + if (pos < firstListItemPosition || pos > lastListItemPosition) { + return listView.getAdapter().getView(pos, null, listView); + } else { + final int childIndex = pos - firstListItemPosition; + return listView.getChildAt(childIndex); + } + } + +} + diff --git a/app/src/main/java/com/github/omadahealth/todo/MainActivity.java b/app/src/main/java/com/github/omadahealth/todo/MainActivity.java new file mode 100644 index 0000000..8f6554f --- /dev/null +++ b/app/src/main/java/com/github/omadahealth/todo/MainActivity.java @@ -0,0 +1,602 @@ +package com.github.omadahealth.todo; + +import android.app.Activity; +import android.app.AlarmManager; +import android.app.Notification; +import android.app.PendingIntent; +import android.content.Context; +import android.content.Intent; +import android.database.Cursor; +import android.database.sqlite.SQLiteDatabase; +import android.graphics.Color; +import android.os.Build; +import android.os.Bundle; +import android.os.SystemClock; +import android.support.annotation.RequiresApi; +import android.support.v4.widget.DrawerLayout; +import android.support.v7.app.AppCompatActivity; +import android.view.Gravity; +import android.view.View; +import android.widget.AdapterView; +import android.widget.CheckBox; +import android.widget.CompoundButton; +import android.widget.ListView; +import android.widget.TextView; + +import com.daimajia.swipe.SwipeLayout; +import com.github.omadahealth.lollipin.TimerActivity; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +import lollipin.orangegangsters.github.com.lollipin.R; + +/*** + * Classe principale du projet + */ +public class MainActivity extends AppCompatActivity { + + int id; + public static ListView mListView, checkListView; + public static List items = new ArrayList<>(); + public static List tmp = new ArrayList<>(); + public static ArrayList cat = new ArrayList<>(); + + + TextView nb_tasks; + public static boolean aff_done, aff_todo, aff_passed, aff_ondate; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_main_todo); + mListView = (ListView) findViewById(R.id.listView); + checkListView = (ListView) findViewById(R.id.checkCat); + nb_tasks = (TextView) findViewById(R.id.nb_tasks); + aff_done = true; + aff_todo = true; + aff_passed = true; + aff_ondate = true; + id = 0; + + CheckBox checkToDo = (CheckBox) findViewById(R.id.switch_todo); + checkToDo.setChecked(true); + checkToDo.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton compoundButton, boolean b) { + if (b) + aff_todo = true; + else + aff_todo = false; + affListCorresponding(); + } + }); + CheckBox checkDone = (CheckBox) findViewById(R.id.switch_done); + checkDone.setChecked(true); + checkDone.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + if (isChecked) + aff_done = true; + else + aff_done = false; + affListCorresponding(); + } + }); + CheckBox checkPassed = (CheckBox) findViewById(R.id.switch_passed); + checkPassed.setChecked(true); + checkPassed.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + if (isChecked) + aff_passed = true; + else + aff_passed = false; + affListCorresponding(); + } + }); + CheckBox checkOnDate = (CheckBox) findViewById(R.id.switch_ondate); + checkOnDate.setChecked(true); + checkOnDate.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + if (isChecked) + aff_ondate = true; + else + aff_ondate = false; + affListCorresponding(); + } + }); + getData(); + getCatData(); + if (cat.size() == 0) + cat.add(new Categorie("none", Color.parseColor("#262D3B"))); + mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { + @Override + public void onItemClick(AdapterView adapterView, View view, int position, long id) { + Intent intentMain = new Intent(MainActivity.this, EditItem.class); + Item item = (Item) mListView.getAdapter().getItem(position); + String title = item.getTitle(); + String time = item.getTime(); + String txt = item.getText(); + String date = item.getDate(); + String categorie = item.getCategorie(); + intentMain.putExtra("position", String.valueOf(position)); + intentMain.putExtra("title", title); + intentMain.putExtra("txt", txt); + intentMain.putExtra("date", date); + intentMain.putExtra("time", time); + intentMain.putExtra("categorie", categorie); + startActivityForResult(intentMain, 1); + } + }); + + ItemAdapter adapter = new ItemAdapter(MainActivity.this, items); + checkAdapter adapter1 = new checkAdapter(MainActivity.this, cat); + checkListView.setAdapter(adapter1); + mListView.setAdapter(adapter); + checkDate(); + } + + /** + * Recup les données des tasks dans la db + */ + public void getData() { + List list = new ArrayList<>(); + Item tmp; + SQLiteDatabase mydatabase = openOrCreateDatabase("todolist", MODE_PRIVATE, null); + mydatabase.execSQL("CREATE TABLE IF NOT EXISTS tasks(Titre VARCHAR, Date VARCHAR, Status VARCHAR, Txt VARCHAR, Cat VARCHAR);"); + Cursor resultSet = mydatabase.rawQuery("Select * from tasks", null); + resultSet.moveToFirst(); + int count = 0; + while (count < resultSet.getCount()) + { + String title = resultSet.getString(resultSet.getColumnIndex("Titre")); + String date = resultSet.getString(resultSet.getColumnIndex("Date")); + String status = resultSet.getString(resultSet.getColumnIndex("Status")); + String txt = resultSet.getString(resultSet.getColumnIndex("Txt")); + String cat = resultSet.getString(resultSet.getColumnIndex("Cat")); + Date d = new Date(); + SimpleDateFormat newDateFormat = new SimpleDateFormat("EE d MMM yyyyHH:mm"); + try { + d = newDateFormat.parse(date); + } catch (ParseException e) { + e.printStackTrace(); + } + tmp = new Item(title, txt, d); + if (status.equals(Item.Status.DONE.toString())) + tmp.setStatus(Item.Status.DONE); + else + tmp.setStatus(Item.Status.TODO); + tmp.setCategorie(cat); + list.add(tmp); + count++; + resultSet.moveToNext(); + } + items = list; + } + + /** + * Recup les données des catégories dans la db + */ + public void getCatData() { + ArrayList list = new ArrayList<>(); + Categorie tmp; + SQLiteDatabase mydatabase = openOrCreateDatabase("todolist", MODE_PRIVATE, null); + mydatabase.execSQL("CREATE TABLE IF NOT EXISTS cats(Name VARCHAR, Color VARCHAR);"); + Cursor resultSet = mydatabase.rawQuery("Select * from cats", null); + resultSet.moveToFirst(); + int count = 0; + while (count < resultSet.getCount()) { + String name = resultSet.getString(resultSet.getColumnIndex("Name")); + String color = resultSet.getString(resultSet.getColumnIndex("Color")); + tmp = new Categorie(name, Integer.parseInt(color)); + list.add(tmp); + count++; + resultSet.moveToNext(); + } + cat = list; + } + + /** + * Returns value to insert in db + * + * @return + */ + public String addToDataBase(int i) { + Item tmp = items.get(i); + String query = "'"; + query += tmp.getTitle() + "','"; + query += tmp.getDate() + tmp.getTime() + "','"; + query += tmp.getStatus().toString() + "','"; + query += tmp.getText() + "','"; + query += tmp.getCategorie() + "'"; + return query; + } + + /** + * Sauvegarde les tasks dans la db + */ + public void saveData() { + String query; + SQLiteDatabase mydatabase = openOrCreateDatabase("todolist", MODE_PRIVATE, null); + mydatabase.execSQL("DROP TABLE IF EXISTS tasks"); + mydatabase.execSQL("CREATE TABLE IF NOT EXISTS tasks(Titre VARCHAR, Date VARCHAR, Status VARCHAR, Txt VARCHAR, Cat VARCHAR);"); + + for (int i = 0; i < items.size(); i++) { + query = addToDataBase(i); + mydatabase.execSQL("INSERT INTO tasks VALUES(" + query + ");"); + } + } + + /** + * Sauvegarde les catégories dans la db + */ + public void saveCategory() { + String query; + SQLiteDatabase mydatabase = openOrCreateDatabase("todolist", MODE_PRIVATE, null); + mydatabase.execSQL("DROP TABLE IF EXISTS cats"); + mydatabase.execSQL("CREATE TABLE IF NOT EXISTS cats(Name VARCHAR, Color VARCHAR);"); + for (int i = 0; i < cat.size(); i++) { + query = "'" + cat.get(i).getName() + "','" + String.valueOf(cat.get(i).getColor()) + "'"; + mydatabase.execSQL("INSERT INTO cats VALUES(" + query + ");"); + } + } + + /** + * Ouvre le menu settings pour l'affichage et les catégories + * + * @param V + */ + public void settings(View V) { + DrawerLayout mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); + mDrawerLayout.openDrawer(Gravity.LEFT); + } + + /** + * Ouvre l'activité pour ajouter un Item + * + * @param v + */ + public void add(View v) { + Intent intentMain = new Intent(MainActivity.this, AddItem.class); + startActivityForResult(intentMain, 1); + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + + if (requestCode == 1) { + if (resultCode == Activity.RESULT_OK) { + String title = data.getStringExtra("title"); + String txt = data.getStringExtra("txt"); + String date = data.getStringExtra("date"); + String delete = data.getStringExtra("delete"); + String category = data.getStringExtra("categorie"); + SimpleDateFormat newDateFormat = new SimpleDateFormat("EE d MMM yyyy k:m"); + Date d = null; + try { + d = newDateFormat.parse(date); + } catch (ParseException e) { + e.printStackTrace(); + } + if (data.getStringExtra("edit").equals("true")) { + int position = Integer.parseInt(data.getStringExtra("position")); + try { + modifyItem(position, title, txt, d, delete, category); + } catch (ParseException e) { + e.printStackTrace(); + } + } else { + Item newItem = new Item(title, txt, d); + newItem.setCategorie(category); + try { + addToList(newItem); + } catch (ParseException e) { + e.printStackTrace(); + } + } + } + if (resultCode == Activity.RESULT_CANCELED) { + //here goes nothing + } + } + if (requestCode == 2) { + if (resultCode == Activity.RESULT_OK) { + saveCategory(); + checkCategories(); + affListCorresponding(); + ((checkAdapter) checkListView.getAdapter()).notifyDataSetChanged(); + } + if (resultCode == Activity.RESULT_CANCELED) { + saveCategory(); + checkCategories(); + affListCorresponding(); + ((checkAdapter) checkListView.getAdapter()).notifyDataSetChanged(); + } + } + } + + /** + * Affiche en rouge la date de la l'item si la date est déjà passée + */ + public void checkDate() { + int i = 0; + Date d; + + d = new Date(); + nb_tasks.setText(String.valueOf(items.size()) + " Tasks"); + while (i < items.size()) { + if (!(items.get(i).getRealDate().after(d))) { + items.get(i).setPassed(true); + items.get(i).setDateColor("#FF0000"); + } else { + items.get(i).setPassed(false); + items.get(i).setDateColor("#121212"); + } + i++; + } + } + + /** + * Ajoute un item à la liste des items + * + * @param item + * @throws ParseException + */ + public void addToList(Item item) throws ParseException { + items.add(item); + checkDate(); + saveData(); + Date f = new Date(); + int c = 0; + int color = Color.BLUE; + while (c < cat.size()) { + if (item.getCategorie().equals(cat.get(c).getName())) { + color = cat.get(c).getColor(); + } + c++; + } + int delay = (int) (item.getRealDate().getTime() - f.getTime()); + if (delay > 0) + scheduleNotification(getNotification(item.getTitle(), item.getText(), color), delay); + affListCorresponding(); + } + + /** + * Modifie un item déja existant + * + * @param position + * @param title + * @param txt + * @param d + * @param delete + * @param cate + * @throws ParseException + */ + public void modifyItem(int position, String title, String txt, Date d, String delete, String cate) throws ParseException { + Item item = items.get(position); + if (delete.equals("false")) { + item.setTitle(title); + item.setText(txt); + item.setDueDate(d); + item.setCategorie(cate); + } else + items.remove(item); + checkDate(); + saveData(); + Date f = new Date(); + int delay = (int) (d.getTime() - f.getTime()); + int color = Color.BLUE; + int c = 0; + while (c < cat.size()) { + if (item.getCategorie().equals(cat.get(c).getName())) { + color = cat.get(c).getColor(); + } + c++; + } + if (delay > 0) + scheduleNotification(getNotification(title, txt, color), delay); + affListCorresponding(); + } + + + /** + * Permet de savoir si l'item doit être affiché en fonction de sa catégorie + * + * @param item + * @return + */ + public boolean showCatForItem(Item item) { + int i = 0; + while (i < cat.size()) { + if (cat.get(i).getName().equals(item.getCategorie())) { + return cat.get(i).getShow(); + } + i++; + } + return false; + } + + /** + * Permet d'afficher les tasks en fonctions des restrictions de l'utilisateur (statut, date, catégories etc...) + */ + public void affListCorresponding() { + int nb_items = items.size(); + boolean t, p; + int i = 0; + tmp.clear(); + while (i < nb_items) { + t = false; + p = false; + if (aff_done && items.get(i).getStatus() == Item.Status.DONE) + t = true; + if (aff_todo && items.get(i).getStatus() == Item.Status.TODO) + t = true; + if ((aff_passed && items.get(i).getPassed())) + p = true; + if ((aff_ondate && !items.get(i).getPassed())) + p = true; + if (t && p && showCatForItem(items.get(i))) + tmp.add(items.get(i)); + i++; + } + ItemAdapter adapter = new ItemAdapter(MainActivity.this, tmp); + mListView.setAdapter(adapter); + if (tmp.size() > 1) + ((TextView) findViewById(R.id.nb_tasks)).setText(String.valueOf(tmp.size()) + " Tasks"); + else + ((TextView) findViewById(R.id.nb_tasks)).setText(String.valueOf(tmp.size()) + " Task"); + adapter.notifyDataSetChanged(); + } + + /** + * Passe le status d'une task en to do + * + * @param v + */ + public void todoClick(View v) { + final int position = mListView.getPositionForView((View) v.getParent()); + SwipeLayout s = (SwipeLayout) mListView.getChildAt(position); + Item a = items.get(position); + a.setStatus(Item.Status.TODO); + affListCorresponding(); + saveData(); + s.close(true); + } + + /** + * Passe une catégorie en visible ou invisible + * + * @param v + */ + public void catCheck(View v) { + final int position = checkListView.getPositionForView((View) v.getParent()); + CheckBox checkBox = (CheckBox) v; + if (checkBox.isChecked()) + cat.get(position).setShow(true); + else + cat.get(position).setShow(false); + affListCorresponding(); + } + + /** + * Change le status de la task à Done + * + * @param v + */ + public void doneClick(View v) { + final int position = mListView.getPositionForView((View) v.getParent()); + SwipeLayout s = (SwipeLayout) mListView.getChildAt(position); + Item a = items.get(position); + a.setStatus(Item.Status.DONE); + s.close(true); + ItemAdapter b = (ItemAdapter) mListView.getAdapter(); + affListCorresponding(); + b.notifyDataSetChanged(); + saveData(); + } + + public void goToTimer(View view) { + Intent intentMain = new Intent(MainActivity.this, TimerActivity.class); + startActivityForResult(intentMain, 2); + } + + /** + * Permet de preparer une notification + * + * @param notification + * @param delay + */ + private void scheduleNotification(Notification notification, int delay) { + + Intent notificationIntent = new Intent(this, NotificationPublisher.class); + notificationIntent.putExtra(NotificationPublisher.NOTIFICATION_ID, 1); + notificationIntent.putExtra(NotificationPublisher.NOTIFICATION, notification); + PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT); + + long futureInMillis = SystemClock.elapsedRealtime() + delay; + AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); + alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, futureInMillis, pendingIntent); + } + + /** + * Permet à l'utilisateur de recevoir des notifications concernant ses taches + * + * @param content le contenu de la notification + * @return un builder + */ + @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN) + private Notification getNotification(String Title, String content, int color) { + Notification.Builder builder = new Notification.Builder(this); + builder.setContentTitle(Title); + builder.setContentText(content); + builder.setSmallIcon(R.drawable.ic_notification); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + builder.setColor(color); + } + affListCorresponding(); + return builder.build(); + } + + /** + * Renvoies l'arraylist contenant les catégries + * + * @return l'array list contenant la ou les catégories + */ + public static ArrayList getCatA() { + ArrayList tmp = new ArrayList(); + int i = 0; + while (i < cat.size()) + tmp.add(cat.get(i++)); + return tmp; + } + + /** + * Ferme le drawer menu + * + * @param v + */ + public void closeMenu(View v) { + DrawerLayout d = ((DrawerLayout) findViewById(R.id.drawer_layout)); + d.closeDrawers(); + } + + public static ArrayList getCat() { + return (getCatA()); + } + + /** + * Verifie si une catégorie à été supprimé et update les tasks si c'est le cas. + */ + + public void checkCategories() { + int i = 0; + + while (i < items.size()) { + int c = 0; + boolean found = false; + while (c < cat.size()) { + if (items.get(i).getCategorie().equals(cat.get(c).getName())) + found = true; + c++; + } + if (!found) + items.get(i).setCategorie("none"); + i++; + } + affListCorresponding(); + } + + /** + * Permet d'ajouter une catégorie via un menu + * + * @param v + */ + public void addCategorie(View v) { + Intent intentMain = new Intent(MainActivity.this, addCategory.class); + startActivityForResult(intentMain, 2); + checkCategories(); + } +} + diff --git a/app/src/main/java/com/github/omadahealth/todo/NotificationPublisher.java b/app/src/main/java/com/github/omadahealth/todo/NotificationPublisher.java new file mode 100644 index 0000000..4edb2fe --- /dev/null +++ b/app/src/main/java/com/github/omadahealth/todo/NotificationPublisher.java @@ -0,0 +1,26 @@ +package com.github.omadahealth.todo; + +/** + * Reçois les notifications + */ + +import android.app.Notification; +import android.app.NotificationManager; +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; + +public class NotificationPublisher extends BroadcastReceiver { + + public static String NOTIFICATION_ID = "notification-id"; + public static String NOTIFICATION = "notification"; + + public void onReceive(Context context, Intent intent) { + + NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); + + Notification notification = intent.getParcelableExtra(NOTIFICATION); + int id = intent.getIntExtra(NOTIFICATION_ID, 0); + notificationManager.notify(id, notification); + } +} diff --git a/app/src/main/java/com/github/omadahealth/todo/addCategory.java b/app/src/main/java/com/github/omadahealth/todo/addCategory.java new file mode 100644 index 0000000..7c8e283 --- /dev/null +++ b/app/src/main/java/com/github/omadahealth/todo/addCategory.java @@ -0,0 +1,145 @@ +package com.github.omadahealth.todo; + +import android.app.Dialog; +import android.graphics.Color; +import android.os.Bundle; +import android.support.v7.app.AppCompatActivity; +import android.view.View; +import android.widget.ListView; +import android.widget.TextView; +import android.widget.Toast; + +import com.daimajia.swipe.SwipeLayout; + +import java.util.ArrayList; + +import lollipin.orangegangsters.github.com.lollipin.R; +import petrov.kristiyan.colorpicker.ColorPicker; + +/** + * Pour ajouter une nouvelle categorie + */ +public class addCategory extends AppCompatActivity { + + int finalColor; + ListView mListView; + public static ArrayList cat2 = new ArrayList<>(); + + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_add_category); + finalColor = Color.parseColor("#262D3B"); + mListView = (ListView) findViewById(R.id.listView); + cat2 = MainActivity.getCat(); + CatAdapter adapter = new CatAdapter(addCategory.this, cat2); + ((TextView) findViewById(R.id.nb_cat)).setText("Categories (" + String.valueOf(cat2.size()) + ")"); + mListView.setAdapter(adapter); + } + + /** + * Set la couleur de la catgéorie + * @param v + * @param dialog + */ + public void setColor(View v, final Dialog dialog) { + ColorPicker colorPicker = new ColorPicker(this); + colorPicker.show(); + colorPicker.setOnChooseColorListener(new ColorPicker.OnChooseColorListener() { + @Override + public void onChooseColor(int position, int color) { + if (color != 0) + finalColor = color; + else + finalColor = Color.parseColor("#262D3B"); + //((View) findViewById(R.id.color)).setBackgroundColor(color); + dialog.findViewById(R.id.color).setBackgroundColor(finalColor); + } + + @Override + public void onCancel() { + //here goes nothing + } + }); + } + + + /** + * Supprime la catégorie de la liste + * @param v + */ + public void delete(View v) { + final int position = mListView.getPositionForView((View) v.getParent()); + if (!MainActivity.cat.get(position).getName().equals("none")) { + MainActivity.cat.remove(position); + cat2.remove(position); + CatAdapter a = (CatAdapter) mListView.getAdapter(); + ((TextView) findViewById(R.id.nb_cat)).setText("Categories (" + String.valueOf(cat2.size()) + ")"); + a.notifyDataSetChanged(); + } else + Toast.makeText(getApplicationContext(), "Error can't delete \"none\" category", Toast.LENGTH_SHORT).show(); + SwipeLayout s = (SwipeLayout) mListView.getChildAt(position); + s.close(true); + } + + /** + * Lorsque l'utilisateur ajoute la categorie + * @param view + */ + public void dialog(View view) { + + // custom dialog + //final View v = (View) this; + final Dialog dialog = new Dialog(this); + dialog.setContentView(R.layout.add_cat_layou); + dialog.setTitle("Title..."); + dialog.findViewById(R.id.color).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + setColor(view, dialog); + } + }); + dialog.findViewById(R.id.cancel).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + dialog.dismiss(); + } + }); + dialog.findViewById(R.id.ok).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + boolean ok = true; + int i =0; + String name = ((TextView) dialog.findViewById(R.id.catName)).getText().toString(); + while (i < MainActivity.getCat().size()) + { + if (name.equals(MainActivity.getCat().get(i).getName())) + ok = false; + i++; + } + if (ok) { + MainActivity.cat.add(new Categorie(name, finalColor)); + cat2.add(new Categorie(name, finalColor)); + CatAdapter a = (CatAdapter) mListView.getAdapter(); + ((TextView) findViewById(R.id.nb_cat)).setText("Categories (" + String.valueOf(cat2.size()) + ")"); + a.notifyDataSetChanged(); + dialog.dismiss(); + } + else { + Toast.makeText(getApplicationContext(), "Error: Category " + name + " already exists", Toast.LENGTH_SHORT).show(); + } + } + }); + dialog.show(); + } + + /** + * Ferme la vue + * @param v + */ + public void finish(View v) + { + finish(); + } +} diff --git a/app/src/main/java/com/github/omadahealth/todo/checkAdapter.java b/app/src/main/java/com/github/omadahealth/todo/checkAdapter.java new file mode 100644 index 0000000..abebd73 --- /dev/null +++ b/app/src/main/java/com/github/omadahealth/todo/checkAdapter.java @@ -0,0 +1,51 @@ +package com.github.omadahealth.todo; + +import android.content.Context; +import android.content.res.ColorStateList; +import android.os.Build; +import android.support.annotation.RequiresApi; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ArrayAdapter; +import android.widget.CheckBox; + +import java.util.List; + +import lollipin.orangegangsters.github.com.lollipin.R; + +/** + * Custom adapteur pour les chckbox des catégories + */ + +public class checkAdapter extends ArrayAdapter { + public checkAdapter(Context context, List Categorie) { + super(context, 0, Categorie); + } + + @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) + @Override + public View getView(int position, View convertView, ViewGroup parent) { + + if (convertView == null) { + convertView = LayoutInflater.from(getContext()).inflate(R.layout.row_check_category, parent, false); + } + checkHolder viewHolder = (checkHolder) convertView.getTag(); + if (viewHolder == null) { + viewHolder = new checkHolder(); + viewHolder.name = (CheckBox) convertView.findViewById(R.id.checkCat2); + convertView.setTag(viewHolder); + } + + final Categorie cat = getItem(position); + viewHolder.name.setText(cat.getName()); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + viewHolder.name.setButtonTintList(ColorStateList.valueOf(cat.getColor())); + } + return convertView; + } + + private class checkHolder { + public CheckBox name; + } +} diff --git a/app/src/main/res/drawable-xxhdpi/cancel.png b/app/src/main/res/drawable-xxhdpi/cancel.png new file mode 100644 index 0000000..308f241 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/cancel.png differ diff --git a/app/src/main/res/drawable-xxhdpi/clock.png b/app/src/main/res/drawable-xxhdpi/clock.png new file mode 100644 index 0000000..08ef2c1 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/clock.png differ diff --git a/app/src/main/res/drawable-xxhdpi/close.png b/app/src/main/res/drawable-xxhdpi/close.png new file mode 100644 index 0000000..6a295a7 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/close.png differ diff --git a/app/src/main/res/drawable-xxhdpi/config.png b/app/src/main/res/drawable-xxhdpi/config.png new file mode 100644 index 0000000..0d94202 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/config.png differ diff --git a/app/src/main/res/drawable-xxhdpi/delete.png b/app/src/main/res/drawable-xxhdpi/delete.png new file mode 100644 index 0000000..024c85a Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/delete.png differ diff --git a/app/src/main/res/drawable-xxhdpi/done.png b/app/src/main/res/drawable-xxhdpi/done.png new file mode 100644 index 0000000..8a68a0b Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/done.png differ diff --git a/app/src/main/res/drawable-xxhdpi/donetask.png b/app/src/main/res/drawable-xxhdpi/donetask.png new file mode 100644 index 0000000..2d44871 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/donetask.png differ diff --git a/app/src/main/res/drawable-xxhdpi/edit.png b/app/src/main/res/drawable-xxhdpi/edit.png new file mode 100644 index 0000000..edccc45 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/edit.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_date_range_black_24dp.png b/app/src/main/res/drawable-xxhdpi/ic_date_range_black_24dp.png new file mode 100644 index 0000000..dcaa8cc Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_date_range_black_24dp.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_menu_camera.xml b/app/src/main/res/drawable-xxhdpi/ic_menu_camera.xml new file mode 100644 index 0000000..0d9ea10 --- /dev/null +++ b/app/src/main/res/drawable-xxhdpi/ic_menu_camera.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable-xxhdpi/ic_menu_gallery.xml b/app/src/main/res/drawable-xxhdpi/ic_menu_gallery.xml new file mode 100644 index 0000000..f6872c4 --- /dev/null +++ b/app/src/main/res/drawable-xxhdpi/ic_menu_gallery.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable-xxhdpi/ic_menu_manage.xml b/app/src/main/res/drawable-xxhdpi/ic_menu_manage.xml new file mode 100644 index 0000000..c1be60b --- /dev/null +++ b/app/src/main/res/drawable-xxhdpi/ic_menu_manage.xml @@ -0,0 +1,9 @@ + + + \ No newline at end of file diff --git a/app/src/main/res/drawable-xxhdpi/ic_menu_send.xml b/app/src/main/res/drawable-xxhdpi/ic_menu_send.xml new file mode 100644 index 0000000..00c668c --- /dev/null +++ b/app/src/main/res/drawable-xxhdpi/ic_menu_send.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable-xxhdpi/ic_menu_share.xml b/app/src/main/res/drawable-xxhdpi/ic_menu_share.xml new file mode 100644 index 0000000..a28fb9e --- /dev/null +++ b/app/src/main/res/drawable-xxhdpi/ic_menu_share.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable-xxhdpi/ic_menu_slideshow.xml b/app/src/main/res/drawable-xxhdpi/ic_menu_slideshow.xml new file mode 100644 index 0000000..209aa64 --- /dev/null +++ b/app/src/main/res/drawable-xxhdpi/ic_menu_slideshow.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable-xxhdpi/ic_notif.png b/app/src/main/res/drawable-xxhdpi/ic_notif.png new file mode 100644 index 0000000..3aa8879 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_notif.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_notification.png b/app/src/main/res/drawable-xxhdpi/ic_notification.png new file mode 100644 index 0000000..28eb80b Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_notification.png differ diff --git a/app/src/main/res/drawable-xxhdpi/label.png b/app/src/main/res/drawable-xxhdpi/label.png new file mode 100644 index 0000000..08726b0 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/label.png differ diff --git a/app/src/main/res/drawable-xxhdpi/menu.png b/app/src/main/res/drawable-xxhdpi/menu.png new file mode 100644 index 0000000..623d147 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/menu.png differ diff --git a/app/src/main/res/drawable-xxhdpi/params.png b/app/src/main/res/drawable-xxhdpi/params.png new file mode 100644 index 0000000..4961c97 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/params.png differ diff --git a/app/src/main/res/drawable-xxhdpi/plus.png b/app/src/main/res/drawable-xxhdpi/plus.png new file mode 100644 index 0000000..627aa01 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/plus.png differ diff --git a/app/src/main/res/drawable-xxhdpi/side_nav_bar.xml b/app/src/main/res/drawable-xxhdpi/side_nav_bar.xml new file mode 100644 index 0000000..458b4b0 --- /dev/null +++ b/app/src/main/res/drawable-xxhdpi/side_nav_bar.xml @@ -0,0 +1,9 @@ + + + \ No newline at end of file diff --git a/app/src/main/res/drawable-xxhdpi/trash.png b/app/src/main/res/drawable-xxhdpi/trash.png new file mode 100644 index 0000000..679b21f Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/trash.png differ diff --git a/app/src/main/res/layout/activity_about_pomocnik.xml b/app/src/main/res/layout/activity_about_pomocnik.xml new file mode 100644 index 0000000..d4dfd04 --- /dev/null +++ b/app/src/main/res/layout/activity_about_pomocnik.xml @@ -0,0 +1,141 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/activity_add_category.xml b/app/src/main/res/layout/activity_add_category.xml new file mode 100644 index 0000000..cfd0cf4 --- /dev/null +++ b/app/src/main/res/layout/activity_add_category.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/activity_add_item.xml b/app/src/main/res/layout/activity_add_item.xml new file mode 100644 index 0000000..288d55f --- /dev/null +++ b/app/src/main/res/layout/activity_add_item.xml @@ -0,0 +1,119 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/activity_compat_locked.xml b/app/src/main/res/layout/activity_compat_locked.xml deleted file mode 100644 index b2dcb81..0000000 --- a/app/src/main/res/layout/activity_compat_locked.xml +++ /dev/null @@ -1,138 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/app/src/main/res/layout/activity_edit_item.xml b/app/src/main/res/layout/activity_edit_item.xml new file mode 100644 index 0000000..405ae10 --- /dev/null +++ b/app/src/main/res/layout/activity_edit_item.xml @@ -0,0 +1,143 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 6c91487..d4baab8 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -3,7 +3,7 @@ android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" - android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity"> + android:paddingBottom="@dimen/activity_vertical_margin" tools:context="com.github.omadahealth.lollipin.MainActivity">