diff --git a/app/build.gradle b/app/build.gradle index 28d75c8..f2133c5 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -2,7 +2,7 @@ apply plugin: 'com.android.application' android { compileSdkVersion 26 - buildToolsVersion "26.0.1" + buildToolsVersion "26.0.3" defaultConfig { applicationId "com.nealgosalia.timetable" minSdkVersion 15 @@ -19,15 +19,15 @@ android { } dependencies { - compile 'com.roughike:bottom-bar:2.0.2' - compile 'com.ncapdevi:frag-nav:1.2.5' - compile 'com.shawnlin:number-picker:2.4.4' - compile fileTree(include: ['*.jar'], dir: 'libs') - compile 'com.daimajia.numberprogressbar:library:1.2@aar' + implementation 'com.roughike:bottom-bar:2.0.2' + implementation 'com.ncapdevi:frag-nav:1.2.5' + implementation 'com.shawnlin:number-picker:2.4.4' + implementation fileTree(include: ['*.jar'], dir: 'libs') + implementation 'com.daimajia.numberprogressbar:library:1.4@aar' //noinspection GradleCompatible - compile 'com.android.support:appcompat-v7:26.0.+' - compile 'com.android.support:design:26.0.+' + implementation 'com.android.support:appcompat-v7:26.1.0' + implementation 'com.android.support:design:26.1.0' testCompile 'junit:junit:4.12' - compile 'com.android.support:support-v4:26.0.+' - compile 'com.android.support:recyclerview-v7:26.0.+' + implementation 'com.android.support:support-v4:26.1.0' + implementation 'com.android.support:recyclerview-v7:26.1.0' } diff --git a/app/src/main/java/com/nealgosalia/timetable/MainActivity.java b/app/src/main/java/com/nealgosalia/timetable/MainActivity.java deleted file mode 100644 index 10c824f..0000000 --- a/app/src/main/java/com/nealgosalia/timetable/MainActivity.java +++ /dev/null @@ -1,102 +0,0 @@ -package com.nealgosalia.timetable; - -import android.support.v7.app.AppCompatActivity; -import android.support.v4.app.Fragment; -import android.content.Intent; -import android.os.Bundle; -import android.os.Handler; -import android.support.annotation.IdRes; -import android.view.Menu; -import android.view.MenuItem; -import android.widget.Toast; - -import com.ncapdevi.fragnav.FragNavController; -import com.nealgosalia.timetable.activities.PreferencesActivity; -import com.nealgosalia.timetable.fragments.AttendanceFragment; -import com.nealgosalia.timetable.fragments.SubjectsFragment; -import com.nealgosalia.timetable.fragments.TimetableFragment; -import com.roughike.bottombar.BottomBar; -import com.roughike.bottombar.OnTabReselectListener; -import com.roughike.bottombar.OnTabSelectListener; - -import java.util.ArrayList; -import java.util.List; - -public class MainActivity extends AppCompatActivity { - - private final int TAB_FIRST = FragNavController.TAB1; - private final int TAB_SECOND = FragNavController.TAB2; - private final int TAB_THIRD = FragNavController.TAB3; - boolean doubleBackToExitPressedOnce = false; - private FragNavController fragNavController; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_main); - List fragments = new ArrayList<>(3); - fragments.add(new TimetableFragment()); - fragments.add(new AttendanceFragment()); - fragments.add(new SubjectsFragment()); - fragNavController = new FragNavController(savedInstanceState, getSupportFragmentManager(), R.id.contentContainer, fragments, TAB_FIRST); - BottomBar bottomBar = (BottomBar) findViewById(R.id.bottomBar); - bottomBar.setDefaultTabPosition(1); - bottomBar.setOnTabSelectListener(new OnTabSelectListener() { - @Override - public void onTabSelected(@IdRes int tabId) { - switch (tabId) { - case R.id.tab_timetable: - fragNavController.switchTab(TAB_FIRST); - break; - case R.id.tab_attendance: - fragNavController.switchTab(TAB_SECOND); - break; - case R.id.tab_subjects: - fragNavController.switchTab(TAB_THIRD); - break; - } - } - }); - - bottomBar.setOnTabReselectListener(new OnTabReselectListener() { - @Override - public void onTabReSelected(@IdRes int tabId) { - fragNavController.clearStack(); - } - }); - } - - @Override - public boolean onCreateOptionsMenu(Menu menu) { - getMenuInflater().inflate(R.menu.menu, menu); - return super.onCreateOptionsMenu(menu); - } - - @Override - public void onBackPressed() { - if (doubleBackToExitPressedOnce) { - super.onBackPressed(); - return; - } - this.doubleBackToExitPressedOnce = true; - Toast.makeText(this, getResources().getString(R.string.press_back), Toast.LENGTH_SHORT).show(); - new Handler().postDelayed(new Runnable() { - @Override - public void run() { - doubleBackToExitPressedOnce = false; - } - }, 2000); - } - - @Override - public boolean onOptionsItemSelected(MenuItem item) { - switch (item.getItemId()) { - case R.id.settings: - Intent intent = new Intent(MainActivity.this, PreferencesActivity.class); - startActivity(intent); - return true; - default: - return super.onOptionsItemSelected(item); - } - } -} diff --git a/app/src/main/java/com/nealgosalia/timetable/MainActivity.kt b/app/src/main/java/com/nealgosalia/timetable/MainActivity.kt new file mode 100644 index 0000000..e709580 --- /dev/null +++ b/app/src/main/java/com/nealgosalia/timetable/MainActivity.kt @@ -0,0 +1,95 @@ +package com.nealgosalia.timetable + +import android.support.v7.app.AppCompatActivity +import android.support.v4.app.Fragment +import android.content.Intent +import android.os.Bundle +import android.os.Handler +import android.support.annotation.IdRes +import android.view.Menu +import android.view.MenuItem +import android.widget.Toast + +import com.ncapdevi.fragnav.FragNavController +import com.nealgosalia.timetable.activities.PreferencesActivity +import com.nealgosalia.timetable.fragments.AttendanceFragment +import com.nealgosalia.timetable.fragments.SubjectsFragment +import com.nealgosalia.timetable.fragments.TimetableFragment +import com.roughike.bottombar.BottomBar +import com.roughike.bottombar.OnTabReselectListener +import com.roughike.bottombar.OnTabSelectListener + +import java.util.ArrayList + +class MainActivity : AppCompatActivity() { + + private val TAB_FIRST = FragNavController.TAB1 + private val TAB_SECOND = FragNavController.TAB2 + private val TAB_THIRD = FragNavController.TAB3 + internal var doubleBackToExitPressedOnce = false + private var fragNavController: FragNavController? = null + + @Override + protected fun onCreate(savedInstanceState: Bundle) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_main) + val fragments = ArrayList(3) + fragments.add(TimetableFragment()) + fragments.add(AttendanceFragment()) + fragments.add(SubjectsFragment()) + fragNavController = FragNavController(savedInstanceState, getSupportFragmentManager(), R.id.contentContainer, fragments, TAB_FIRST) + val bottomBar = findViewById(R.id.bottomBar) as BottomBar + bottomBar.setDefaultTabPosition(1) + bottomBar.setOnTabSelectListener(object : OnTabSelectListener() { + @Override + fun onTabSelected(@IdRes tabId: Int) { + when (tabId) { + R.id.tab_timetable -> fragNavController!!.switchTab(TAB_FIRST) + R.id.tab_attendance -> fragNavController!!.switchTab(TAB_SECOND) + R.id.tab_subjects -> fragNavController!!.switchTab(TAB_THIRD) + } + } + }) + + bottomBar.setOnTabReselectListener(object : OnTabReselectListener() { + @Override + fun onTabReSelected(@IdRes tabId: Int) { + fragNavController!!.clearStack() + } + }) + } + + @Override + fun onCreateOptionsMenu(menu: Menu): Boolean { + getMenuInflater().inflate(R.menu.menu, menu) + return super.onCreateOptionsMenu(menu) + } + + @Override + fun onBackPressed() { + if (doubleBackToExitPressedOnce) { + super.onBackPressed() + return + } + this.doubleBackToExitPressedOnce = true + Toast.makeText(this, getResources().getString(R.string.press_back), Toast.LENGTH_SHORT).show() + Handler().postDelayed(object : Runnable() { + @Override + fun run() { + doubleBackToExitPressedOnce = false + } + }, 2000) + } + + @Override + fun onOptionsItemSelected(item: MenuItem): Boolean { + when (item.getItemId()) { + R.id.settings -> { + val intent = Intent(this@MainActivity, PreferencesActivity::class.java) + startActivity(intent) + return true + } + else -> return super.onOptionsItemSelected(item) + } + } +} diff --git a/app/src/main/java/com/nealgosalia/timetable/activities/PreferencesActivity.java b/app/src/main/java/com/nealgosalia/timetable/activities/PreferencesActivity.java deleted file mode 100644 index 628e534..0000000 --- a/app/src/main/java/com/nealgosalia/timetable/activities/PreferencesActivity.java +++ /dev/null @@ -1,109 +0,0 @@ -package com.nealgosalia.timetable.activities; - -import android.Manifest; -import android.app.Activity; -import android.content.pm.PackageManager; -import android.os.Build; -import android.os.Bundle; -import android.os.Environment; -import android.support.v4.app.ActivityCompat; -import android.support.v4.content.ContextCompat; -import android.support.v7.app.AppCompatActivity; -import android.util.Log; - -import com.nealgosalia.timetable.R; -import com.nealgosalia.timetable.fragments.MyPreferenceFragment; - -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.nio.channels.FileChannel; - -public class PreferencesActivity extends AppCompatActivity { - - private static final String TAG = "PreferencesActivity"; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_preferences); - getFragmentManager().beginTransaction().replace(android.R.id.content, new MyPreferenceFragment()).commit(); - } - - @Override - public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { - super.onRequestPermissionsResult(requestCode, permissions, grantResults); - if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { - Log.v(TAG, "Permission: " + permissions[0] + "was " + grantResults[0]); - } - } - - public boolean importDatabase(String ePath) { - try { - File sd = Environment.getExternalStorageDirectory(); - if (sd.canWrite()) { - String currentDBPath = sd + "/Timetable/" + ePath; - String internalDBPath = "data/data/com.nealgosalia.timetable/databases/"; - String backupDBPath = internalDBPath + ePath; - File internalDB = new File(internalDBPath); - internalDB.mkdirs(); - File currentDB = new File(currentDBPath); - File backupDB = new File(backupDBPath); - if (currentDB.exists()) { - FileChannel src = new FileInputStream(currentDB).getChannel(); - FileChannel dst = new FileOutputStream(backupDB).getChannel(); - dst.transferFrom(src, 0, src.size()); - src.close(); - dst.close(); - return true; - } - } - } catch (Exception e) { - e.printStackTrace(); - } - return false; - } - - public boolean exportDatabase(String mPath) { - try { - File outDir = new File(Environment.getExternalStorageDirectory() + File.separator + "Timetable"); - if (!outDir.exists()) { - Log.d(TAG, "Creating directory"); - outDir.mkdir(); - } else { - Log.d(TAG, "Directory present"); - } - String currentDBPath = Environment.getDataDirectory() + "/data/com.nealgosalia.timetable/databases/" + mPath; - String backupDBPath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/Timetable/" + mPath; - File currentDB = new File(currentDBPath); - File backupDB = new File(backupDBPath); - if (currentDB.exists()) { - FileChannel src = new FileInputStream(currentDB).getChannel(); - FileChannel dst = new FileOutputStream(backupDB).getChannel(); - dst.transferFrom(src, 0, src.size()); - src.close(); - dst.close(); - return true; - } - } catch (Exception e) { - e.printStackTrace(); - } - return false; - } - - public boolean isStoragePermissionGranted(Activity activity) { - if (Build.VERSION.SDK_INT >= 23) { - if (ContextCompat.checkSelfPermission(getApplicationContext(), android.Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) { - Log.v(TAG, "Permission granted"); - return true; - } else { - Log.v(TAG, "Permission denied"); - ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1); - return false; - } - } else { //permission is automatically granted on sdk<23 upon installation - Log.v(TAG, "Permission granted"); - return true; - } - } -} \ No newline at end of file diff --git a/app/src/main/java/com/nealgosalia/timetable/activities/PreferencesActivity.kt b/app/src/main/java/com/nealgosalia/timetable/activities/PreferencesActivity.kt new file mode 100644 index 0000000..10c56e2 --- /dev/null +++ b/app/src/main/java/com/nealgosalia/timetable/activities/PreferencesActivity.kt @@ -0,0 +1,114 @@ +package com.nealgosalia.timetable.activities + +import android.Manifest +import android.app.Activity +import android.content.pm.PackageManager +import android.os.Build +import android.os.Bundle +import android.os.Environment +import android.support.v4.app.ActivityCompat +import android.support.v4.content.ContextCompat +import android.support.v7.app.AppCompatActivity +import android.util.Log + +import com.nealgosalia.timetable.R +import com.nealgosalia.timetable.fragments.MyPreferenceFragment + +import java.io.File +import java.io.FileInputStream +import java.io.FileOutputStream +import java.nio.channels.FileChannel + +class PreferencesActivity : AppCompatActivity() { + + @Override + protected fun onCreate(savedInstanceState: Bundle) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_preferences) + getFragmentManager().beginTransaction().replace(android.R.id.content, MyPreferenceFragment()).commit() + } + + @Override + fun onRequestPermissionsResult(requestCode: Int, permissions: Array, grantResults: IntArray) { + super.onRequestPermissionsResult(requestCode, permissions, grantResults) + if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { + Log.v(TAG, "Permission: " + permissions[0] + "was " + grantResults[0]) + } + } + + fun importDatabase(ePath: String): Boolean { + try { + val sd = Environment.getExternalStorageDirectory() + if (sd.canWrite()) { + val currentDBPath = sd + "/Timetable/" + ePath + val internalDBPath = "data/data/com.nealgosalia.timetable/databases/" + val backupDBPath = internalDBPath + ePath + val internalDB = File(internalDBPath) + internalDB.mkdirs() + val currentDB = File(currentDBPath) + val backupDB = File(backupDBPath) + if (currentDB.exists()) { + val src = FileInputStream(currentDB).getChannel() + val dst = FileOutputStream(backupDB).getChannel() + dst.transferFrom(src, 0, src.size()) + src.close() + dst.close() + return true + } + } + } catch (e: Exception) { + e.printStackTrace() + } + + return false + } + + fun exportDatabase(mPath: String): Boolean { + try { + val outDir = File(Environment.getExternalStorageDirectory() + File.separator + "Timetable") + if (!outDir.exists()) { + Log.d(TAG, "Creating directory") + outDir.mkdir() + } else { + Log.d(TAG, "Directory present") + } + val currentDBPath = Environment.getDataDirectory() + "/data/com.nealgosalia.timetable/databases/" + mPath + val backupDBPath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/Timetable/" + mPath + val currentDB = File(currentDBPath) + val backupDB = File(backupDBPath) + if (currentDB.exists()) { + val src = FileInputStream(currentDB).getChannel() + val dst = FileOutputStream(backupDB).getChannel() + dst.transferFrom(src, 0, src.size()) + src.close() + dst.close() + return true + } + } catch (e: Exception) { + e.printStackTrace() + } + + return false + } + + fun isStoragePermissionGranted(activity: Activity): Boolean { + if (Build.VERSION.SDK_INT >= 23) { + if (ContextCompat.checkSelfPermission(getApplicationContext(), android.Manifest.permission.WRITE_EXTERNAL_STORAGE) === PackageManager.PERMISSION_GRANTED) { + Log.v(TAG, "Permission granted") + return true + } else { + Log.v(TAG, "Permission denied") + ActivityCompat.requestPermissions(activity, arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE), 1) + return false + } + } else { //permission is automatically granted on sdk<23 upon installation + Log.v(TAG, "Permission granted") + return true + } + } + + companion object { + + private val TAG = "PreferencesActivity" + } +} \ No newline at end of file diff --git a/app/src/main/java/com/nealgosalia/timetable/activities/SplashActivity.java b/app/src/main/java/com/nealgosalia/timetable/activities/SplashActivity.java deleted file mode 100644 index 1b6ad25..0000000 --- a/app/src/main/java/com/nealgosalia/timetable/activities/SplashActivity.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.nealgosalia.timetable.activities; - -import android.app.Activity; -import android.content.Intent; -import android.os.Bundle; -import android.os.Handler; -import android.view.View; -import android.view.Window; - -import com.nealgosalia.timetable.MainActivity; -import com.nealgosalia.timetable.R; - -public class SplashActivity extends Activity { - private Runnable runnable; - private Handler handler; - - protected void onCreate(Bundle savedInstanceState) { - requestWindowFeature(Window.FEATURE_NO_TITLE); - Window window = getWindow(); - window.getDecorView().setOverScrollMode(View.OVER_SCROLL_NEVER); - window.getDecorView().setSystemUiVisibility( - View.SYSTEM_UI_FLAG_LAYOUT_STABLE - | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION - | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN - | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION - | View.SYSTEM_UI_FLAG_FULLSCREEN - | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY); - super.onCreate(savedInstanceState); - setContentView(R.layout.splash); - initialize(); - } - private void initialize() - { - handler = new Handler(); - runnable = new Runnable() - { - @Override - public void run() - { - Intent intent = new Intent(SplashActivity.this, MainActivity.class); - startActivity(intent); - } - }; - handler.postDelayed(runnable, 1000); - } - - @Override - public void onBackPressed() { - finish(); - handler.removeCallbacks(runnable); - } - -} \ No newline at end of file diff --git a/app/src/main/java/com/nealgosalia/timetable/activities/SplashActivity.kt b/app/src/main/java/com/nealgosalia/timetable/activities/SplashActivity.kt new file mode 100644 index 0000000..35e980f --- /dev/null +++ b/app/src/main/java/com/nealgosalia/timetable/activities/SplashActivity.kt @@ -0,0 +1,51 @@ +package com.nealgosalia.timetable.activities + +import android.app.Activity +import android.content.Intent +import android.os.Bundle +import android.os.Handler +import android.view.View +import android.view.Window + +import com.nealgosalia.timetable.MainActivity +import com.nealgosalia.timetable.R + +class SplashActivity : Activity() { + private var runnable: Runnable? = null + private var handler: Handler? = null + + protected fun onCreate(savedInstanceState: Bundle) { + requestWindowFeature(Window.FEATURE_NO_TITLE) + val window = getWindow() + window.getDecorView().setOverScrollMode(View.OVER_SCROLL_NEVER) + window.getDecorView().setSystemUiVisibility( + View.SYSTEM_UI_FLAG_LAYOUT_STABLE + or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION + or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN + or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION + or View.SYSTEM_UI_FLAG_FULLSCREEN + or View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY) + super.onCreate(savedInstanceState) + setContentView(R.layout.splash) + initialize() + } + + private fun initialize() { + handler = Handler() + runnable = object : Runnable() { + @Override + fun run() { + val intent = Intent(this@SplashActivity, MainActivity::class.java) + startActivity(intent) + } + } + handler!!.postDelayed(runnable, 1000) + } + + @Override + fun onBackPressed() { + finish() + handler!!.removeCallbacks(runnable) + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/nealgosalia/timetable/adapters/AttendanceAdapter.java b/app/src/main/java/com/nealgosalia/timetable/adapters/AttendanceAdapter.java deleted file mode 100644 index c6c3759..0000000 --- a/app/src/main/java/com/nealgosalia/timetable/adapters/AttendanceAdapter.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.nealgosalia.timetable.adapters; - -import android.support.v7.widget.RecyclerView; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import com.daimajia.numberprogressbar.NumberProgressBar; -import com.nealgosalia.timetable.R; -import com.nealgosalia.timetable.utils.Subject; - -import java.util.List; - -public class AttendanceAdapter extends RecyclerView.Adapter { - - private List subjectList; - private List progressList; - - public class MyViewHolder extends RecyclerView.ViewHolder { - public TextView subjectName; - public NumberProgressBar attendance; - - public MyViewHolder(View view) { - super(view); - subjectName = view.findViewById(R.id.subjectNameAttendance); - attendance = view.findViewById(R.id.attendance_progress_bar); - } - } - - public AttendanceAdapter(List subjectList, List progress) { - this.subjectList = subjectList; - this.progressList = progress; - } - - @Override - public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { - View itemView = LayoutInflater.from(parent.getContext()) - .inflate(R.layout.row_attendance, parent, false); - - return new MyViewHolder(itemView); - } - - @Override - public void onBindViewHolder(MyViewHolder holder, int position) { - Subject subject = subjectList.get(position); - holder.subjectName.setText(subject.getSubjectName()); - holder.attendance.setProgress(progressList.get(position)); - } - - @Override - public int getItemCount() { - return subjectList.size(); - } -} diff --git a/app/src/main/java/com/nealgosalia/timetable/adapters/AttendanceAdapter.kt b/app/src/main/java/com/nealgosalia/timetable/adapters/AttendanceAdapter.kt new file mode 100644 index 0000000..cc35b3a --- /dev/null +++ b/app/src/main/java/com/nealgosalia/timetable/adapters/AttendanceAdapter.kt @@ -0,0 +1,43 @@ +package com.nealgosalia.timetable.adapters + +import android.support.v7.widget.RecyclerView +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView + +import com.daimajia.numberprogressbar.NumberProgressBar +import com.nealgosalia.timetable.R +import com.nealgosalia.timetable.utils.Subject + +class AttendanceAdapter(private val subjectList: List, private val progressList: List) : RecyclerView.Adapter() { + + val itemCount: Int + @Override + get() = subjectList.size() + + inner class MyViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var subjectName: TextView + var attendance: NumberProgressBar + + init { + subjectName = view.findViewById(R.id.subjectNameAttendance) + attendance = view.findViewById(R.id.attendance_progress_bar) + } + } + + @Override + fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder { + val itemView = LayoutInflater.from(parent.getContext()) + .inflate(R.layout.row_attendance, parent, false) + + return MyViewHolder(itemView) + } + + @Override + fun onBindViewHolder(holder: MyViewHolder, position: Int) { + val subject = subjectList[position] + holder.subjectName.setText(subject.getSubjectName()) + holder.attendance.setProgress(progressList[position]) + } +} diff --git a/app/src/main/java/com/nealgosalia/timetable/adapters/LecturesAdapter.java b/app/src/main/java/com/nealgosalia/timetable/adapters/LecturesAdapter.java deleted file mode 100644 index f5793c1..0000000 --- a/app/src/main/java/com/nealgosalia/timetable/adapters/LecturesAdapter.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.nealgosalia.timetable.adapters; - -import android.support.v7.widget.RecyclerView; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import com.nealgosalia.timetable.R; -import com.nealgosalia.timetable.utils.Lecture; - -import java.util.List; - -public class LecturesAdapter extends RecyclerView.Adapter { - - private List lectureList; - - public class MyViewHolder extends RecyclerView.ViewHolder { - public TextView lectureName; - public TextView lectureTime; - public TextView lectureroom; - - public MyViewHolder(View view) { - super(view); - lectureName = view.findViewById(R.id.lectureName); - lectureTime = view.findViewById(R.id.lectureTime); - lectureroom = view.findViewById(R.id.lectureroom); - - } - } - - public LecturesAdapter(List lectureList) { - this.lectureList = lectureList; - } - - @Override - public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { - View itemView = LayoutInflater.from(parent.getContext()) - .inflate(R.layout.row_lectures, parent, false); - - return new MyViewHolder(itemView); - } - - @Override - public void onBindViewHolder(MyViewHolder holder, int position) { - Lecture lecture = lectureList.get(position); - holder.lectureName.setText(lecture.getSubjectName()); - holder.lectureTime.setText(lecture.getStartTime() + " - " + lecture.getEndTime()); - holder.lectureroom.setText(lecture.getRoomNo()); - } - - @Override - public int getItemCount() { - return lectureList.size(); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/nealgosalia/timetable/adapters/LecturesAdapter.kt b/app/src/main/java/com/nealgosalia/timetable/adapters/LecturesAdapter.kt new file mode 100644 index 0000000..59122ef --- /dev/null +++ b/app/src/main/java/com/nealgosalia/timetable/adapters/LecturesAdapter.kt @@ -0,0 +1,46 @@ +package com.nealgosalia.timetable.adapters + +import android.support.v7.widget.RecyclerView +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView + +import com.nealgosalia.timetable.R +import com.nealgosalia.timetable.utils.Lecture + +class LecturesAdapter(private val lectureList: List) : RecyclerView.Adapter() { + + val itemCount: Int + @Override + get() = lectureList.size() + + inner class MyViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var lectureName: TextView + var lectureTime: TextView + var lectureroom: TextView + + init { + lectureName = view.findViewById(R.id.lectureName) + lectureTime = view.findViewById(R.id.lectureTime) + lectureroom = view.findViewById(R.id.lectureroom) + + } + } + + @Override + fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder { + val itemView = LayoutInflater.from(parent.getContext()) + .inflate(R.layout.row_lectures, parent, false) + + return MyViewHolder(itemView) + } + + @Override + fun onBindViewHolder(holder: MyViewHolder, position: Int) { + val lecture = lectureList[position] + holder.lectureName.setText(lecture.getSubjectName()) + holder.lectureTime.setText(lecture.getStartTime() + " - " + lecture.getEndTime()) + holder.lectureroom.setText(lecture.getRoomNo()) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/nealgosalia/timetable/adapters/SimpleFragmentPagerAdapter.java b/app/src/main/java/com/nealgosalia/timetable/adapters/SimpleFragmentPagerAdapter.java deleted file mode 100644 index f79f1b5..0000000 --- a/app/src/main/java/com/nealgosalia/timetable/adapters/SimpleFragmentPagerAdapter.java +++ /dev/null @@ -1,73 +0,0 @@ -package com.nealgosalia.timetable.adapters; - -import android.content.Context; -import android.support.v4.app.Fragment; -import android.support.v4.app.FragmentManager; -import android.support.v4.app.FragmentPagerAdapter; - -import com.nealgosalia.timetable.R; -import com.nealgosalia.timetable.fragments.FridayFragment; -import com.nealgosalia.timetable.fragments.MondayFragment; -import com.nealgosalia.timetable.fragments.SaturdayFragment; -import com.nealgosalia.timetable.fragments.SundayFragment; -import com.nealgosalia.timetable.fragments.ThursdayFragment; -import com.nealgosalia.timetable.fragments.TuesdayFragment; -import com.nealgosalia.timetable.fragments.WednesdayFragment; - -public class SimpleFragmentPagerAdapter extends FragmentPagerAdapter { - - private Context mContext; - - public SimpleFragmentPagerAdapter(FragmentManager fm, Context context) { - super(fm); - mContext = context; - } - - @Override - public Fragment getItem(int position) { - if (position == 0) { - return new MondayFragment(); - } else if (position == 1) { - return new TuesdayFragment(); - } else if (position == 2) { - return new WednesdayFragment(); - } else if (position == 3) { - return new ThursdayFragment(); - } else if (position == 4) { - return new FridayFragment(); - } else if (position == 5) { - return new SaturdayFragment(); - } else { - return new SundayFragment(); - } - } - - @Override - public int getItemPosition(Object object) { - return POSITION_NONE; - } - - @Override - public int getCount() { - return 7; - } - - @Override - public CharSequence getPageTitle(int position) { - if (position == 0) { - return mContext.getString(R.string.monday); - } else if (position == 1) { - return mContext.getString(R.string.tuesday); - } else if (position == 2) { - return mContext.getString(R.string.wednesday); - } else if (position == 3) { - return mContext.getString(R.string.thursday); - } else if (position == 4) { - return mContext.getString(R.string.friday); - } else if (position == 5) { - return mContext.getString(R.string.saturday); - } else { - return mContext.getString(R.string.sunday); - } - } -} \ No newline at end of file diff --git a/app/src/main/java/com/nealgosalia/timetable/adapters/SimpleFragmentPagerAdapter.kt b/app/src/main/java/com/nealgosalia/timetable/adapters/SimpleFragmentPagerAdapter.kt new file mode 100644 index 0000000..2714719 --- /dev/null +++ b/app/src/main/java/com/nealgosalia/timetable/adapters/SimpleFragmentPagerAdapter.kt @@ -0,0 +1,65 @@ +package com.nealgosalia.timetable.adapters + +import android.content.Context +import android.support.v4.app.Fragment +import android.support.v4.app.FragmentManager +import android.support.v4.app.FragmentPagerAdapter + +import com.nealgosalia.timetable.R +import com.nealgosalia.timetable.fragments.FridayFragment +import com.nealgosalia.timetable.fragments.MondayFragment +import com.nealgosalia.timetable.fragments.SaturdayFragment +import com.nealgosalia.timetable.fragments.SundayFragment +import com.nealgosalia.timetable.fragments.ThursdayFragment +import com.nealgosalia.timetable.fragments.TuesdayFragment +import com.nealgosalia.timetable.fragments.WednesdayFragment + +class SimpleFragmentPagerAdapter(fm: FragmentManager, private val mContext: Context) : FragmentPagerAdapter(fm) { + + val count: Int + @Override + get() = 7 + + @Override + fun getItem(position: Int): Fragment { + return if (position == 0) { + MondayFragment() + } else if (position == 1) { + TuesdayFragment() + } else if (position == 2) { + WednesdayFragment() + } else if (position == 3) { + ThursdayFragment() + } else if (position == 4) { + FridayFragment() + } else if (position == 5) { + SaturdayFragment() + } else { + SundayFragment() + } + } + + @Override + fun getItemPosition(`object`: Object): Int { + return POSITION_NONE + } + + @Override + fun getPageTitle(position: Int): CharSequence { + return if (position == 0) { + mContext.getString(R.string.monday) + } else if (position == 1) { + mContext.getString(R.string.tuesday) + } else if (position == 2) { + mContext.getString(R.string.wednesday) + } else if (position == 3) { + mContext.getString(R.string.thursday) + } else if (position == 4) { + mContext.getString(R.string.friday) + } else if (position == 5) { + mContext.getString(R.string.saturday) + } else { + mContext.getString(R.string.sunday) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/nealgosalia/timetable/adapters/SubjectsAdapter.java b/app/src/main/java/com/nealgosalia/timetable/adapters/SubjectsAdapter.java deleted file mode 100644 index 685b9ce..0000000 --- a/app/src/main/java/com/nealgosalia/timetable/adapters/SubjectsAdapter.java +++ /dev/null @@ -1,49 +0,0 @@ -package com.nealgosalia.timetable.adapters; - -import android.support.v7.widget.RecyclerView; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import com.nealgosalia.timetable.R; -import com.nealgosalia.timetable.utils.Subject; - -import java.util.List; - -public class SubjectsAdapter extends RecyclerView.Adapter { - - private List subjectsList; - - public class MyViewHolder extends RecyclerView.ViewHolder { - public TextView subjectName; - - public MyViewHolder(View view) { - super(view); - subjectName = view.findViewById(R.id.subjectName); - } - } - - public SubjectsAdapter(List subjectsList) { - this.subjectsList = subjectsList; - } - - @Override - public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { - View itemView = LayoutInflater.from(parent.getContext()) - .inflate(R.layout.list_subjects, parent, false); - - return new MyViewHolder(itemView); - } - - @Override - public void onBindViewHolder(MyViewHolder holder, int position) { - Subject subject = subjectsList.get(position); - holder.subjectName.setText(subject.getSubjectName()); - } - - @Override - public int getItemCount() { - return subjectsList.size(); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/nealgosalia/timetable/adapters/SubjectsAdapter.kt b/app/src/main/java/com/nealgosalia/timetable/adapters/SubjectsAdapter.kt new file mode 100644 index 0000000..0401988 --- /dev/null +++ b/app/src/main/java/com/nealgosalia/timetable/adapters/SubjectsAdapter.kt @@ -0,0 +1,39 @@ +package com.nealgosalia.timetable.adapters + +import android.support.v7.widget.RecyclerView +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView + +import com.nealgosalia.timetable.R +import com.nealgosalia.timetable.utils.Subject + +class SubjectsAdapter(private val subjectsList: List) : RecyclerView.Adapter() { + + val itemCount: Int + @Override + get() = subjectsList.size() + + inner class MyViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var subjectName: TextView + + init { + subjectName = view.findViewById(R.id.subjectName) + } + } + + @Override + fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder { + val itemView = LayoutInflater.from(parent.getContext()) + .inflate(R.layout.list_subjects, parent, false) + + return MyViewHolder(itemView) + } + + @Override + fun onBindViewHolder(holder: MyViewHolder, position: Int) { + val subject = subjectsList[position] + holder.subjectName.setText(subject.getSubjectName()) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/nealgosalia/timetable/database/FragmentDatabase.java b/app/src/main/java/com/nealgosalia/timetable/database/FragmentDatabase.java deleted file mode 100644 index cc6016c..0000000 --- a/app/src/main/java/com/nealgosalia/timetable/database/FragmentDatabase.java +++ /dev/null @@ -1,115 +0,0 @@ -package com.nealgosalia.timetable.database; - -import android.content.ContentValues; -import android.content.Context; -import android.database.Cursor; -import android.database.sqlite.SQLiteDatabase; -import android.database.sqlite.SQLiteOpenHelper; - -import com.nealgosalia.timetable.utils.Lecture; - -import java.util.ArrayList; -import java.util.List; -import java.util.Locale; - -public class FragmentDatabase extends SQLiteOpenHelper { - - private static final String TAG = "FragmentDatabase"; - private static final int DATABASE_VERSION = 1; - private static final String DATABASE_NAME = "lecture.db"; - private static final String TABLE_DETAIL = "lectureDetails"; - private static final String DAY = "day"; - private static final String SUBJECT = "subject"; - private static final String START_HOUR = "startHour"; - private static final String END_HOUR = "endHour"; - private static final String START_MINUTE = "startMinute"; - private static final String END_MINUTE = "endMinute"; - private static final String ROOM_NUMBER = "roomNo"; - private static final String CREATE_TABLE = "create table " - + TABLE_DETAIL + "(" + DAY + " integer not null, " + SUBJECT + " varchar not null," - + START_HOUR + " integer not null," + START_MINUTE + " integer not null," - + END_HOUR + " integer not null," + END_MINUTE + " integer not null," + ROOM_NUMBER + " varchar not null);"; - private List lecturesList = new ArrayList<>(); - - public FragmentDatabase(Context context) { - super(context, DATABASE_NAME, null, DATABASE_VERSION); - } - - @Override - public void onCreate(SQLiteDatabase db) { - db.execSQL(CREATE_TABLE); - } - - @Override - public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { - db.execSQL("DROP TABLE IF EXISTS " + TABLE_DETAIL); - onCreate(db); - } - - public void add(FragmentDetails fd) { - SQLiteDatabase db = this.getWritableDatabase(); - ContentValues values = new ContentValues(); - values.put(DAY, fd.getDay()); - values.put(SUBJECT, fd.getSubject()); - values.put(START_HOUR, fd.getStartHour()); - values.put(START_MINUTE, fd.getStartMinute()); - values.put(END_HOUR, fd.getEndHour()); - values.put(END_MINUTE, fd.getEndMinute()); - values.put(ROOM_NUMBER,fd.getRoomNo()); - db.insert(TABLE_DETAIL, null, values); - db.close(); - } - - public void remove(FragmentDetails fd) { - SQLiteDatabase db = this.getWritableDatabase(); - String selection = FragmentDatabase.DAY + "=? AND " + FragmentDatabase.START_HOUR + "=? AND "+ FragmentDatabase.START_MINUTE + "=?"; - String[] selectionArgs = { Integer.toString(fd.getDay()),Integer.toString(fd.getStartHour()),Integer.toString(fd.getEndMinute()) }; - db.delete(FragmentDatabase.TABLE_DETAIL, selection, selectionArgs); - } - - public List getLectureList() { - String sql = "select * from " + TABLE_DETAIL; - SQLiteDatabase db = this.getReadableDatabase(); - Cursor cursor = db.rawQuery(sql, null); - try { - lecturesList.clear(); - while (cursor.moveToNext()) { - Lecture lecture = new Lecture(); - lecture.setSubjectName(cursor.getString(1)); - lecture.setStartTime(String.format(Locale.US, "%02d:%02d", cursor.getInt(2), cursor.getInt(3))); - lecture.setEndTime(String.format(Locale.US, "%02d:%02d", cursor.getInt(4), cursor.getInt(5))); - lecture.setDay(cursor.getInt(0)); - lecture.setRoomNo(cursor.getString(6)); - lecturesList.add(lecture); - } - } catch (Exception e) { - } finally { - cursor.close(); - } - db.close(); - return lecturesList; - } - - public List getLectureList(int pos) { - String sql = "select * from " + TABLE_DETAIL + " where day=" + pos + " order by " + START_HOUR + "," + START_MINUTE; - SQLiteDatabase db = this.getReadableDatabase(); - Cursor cursor = db.rawQuery(sql, null); - try { - lecturesList.clear(); - while (cursor.moveToNext()) { - Lecture lecture = new Lecture(); - lecture.setSubjectName(cursor.getString(1)); - lecture.setStartTime(String.format(Locale.US, "%02d:%02d", cursor.getInt(2), cursor.getInt(3))); - lecture.setEndTime(String.format(Locale.US, "%02d:%02d", cursor.getInt(4), cursor.getInt(5))); - lecture.setDay(cursor.getInt(0)); - lecture.setRoomNo(cursor.getString(6)); - lecturesList.add(lecture); - } - } catch (Exception e) { - } finally { - cursor.close(); - } - db.close(); - return lecturesList; - } -} \ No newline at end of file diff --git a/app/src/main/java/com/nealgosalia/timetable/database/FragmentDatabase.kt b/app/src/main/java/com/nealgosalia/timetable/database/FragmentDatabase.kt new file mode 100644 index 0000000..377f5a0 --- /dev/null +++ b/app/src/main/java/com/nealgosalia/timetable/database/FragmentDatabase.kt @@ -0,0 +1,114 @@ +package com.nealgosalia.timetable.database + +import android.content.ContentValues +import android.content.Context +import android.database.Cursor +import android.database.sqlite.SQLiteDatabase +import android.database.sqlite.SQLiteOpenHelper + +import com.nealgosalia.timetable.utils.Lecture + +import java.util.ArrayList +import java.util.Locale + +class FragmentDatabase(context: Context) : SQLiteOpenHelper(context, DATABASE_NAME, null, DATABASE_VERSION) { + private val lecturesList = ArrayList() + + val lectureList: List + get() { + val sql = "select * from $TABLE_DETAIL" + val db = this.getReadableDatabase() + val cursor = db.rawQuery(sql, null) + try { + lecturesList.clear() + while (cursor.moveToNext()) { + val lecture = Lecture() + lecture.setSubjectName(cursor.getString(1)) + lecture.setStartTime(String.format(Locale.US, "%02d:%02d", cursor.getInt(2), cursor.getInt(3))) + lecture.setEndTime(String.format(Locale.US, "%02d:%02d", cursor.getInt(4), cursor.getInt(5))) + lecture.setDay(cursor.getInt(0)) + lecture.setRoomNo(cursor.getString(6)) + lecturesList.add(lecture) + } + } catch (e: Exception) { + } finally { + cursor.close() + } + db.close() + return lecturesList + } + + @Override + fun onCreate(db: SQLiteDatabase) { + db.execSQL(CREATE_TABLE) + } + + @Override + fun onUpgrade(db: SQLiteDatabase, oldVersion: Int, newVersion: Int) { + db.execSQL("DROP TABLE IF EXISTS $TABLE_DETAIL") + onCreate(db) + } + + fun add(fd: FragmentDetails) { + val db = this.getWritableDatabase() + val values = ContentValues() + values.put(DAY, fd.getDay()) + values.put(SUBJECT, fd.getSubject()) + values.put(START_HOUR, fd.getStartHour()) + values.put(START_MINUTE, fd.getStartMinute()) + values.put(END_HOUR, fd.getEndHour()) + values.put(END_MINUTE, fd.getEndMinute()) + values.put(ROOM_NUMBER, fd.getRoomNo()) + db.insert(TABLE_DETAIL, null, values) + db.close() + } + + fun remove(fd: FragmentDetails) { + val db = this.getWritableDatabase() + val selection = FragmentDatabase.DAY + "=? AND " + FragmentDatabase.START_HOUR + "=? AND " + FragmentDatabase.START_MINUTE + "=?" + val selectionArgs = arrayOf(Integer.toString(fd.getDay()), Integer.toString(fd.getStartHour()), Integer.toString(fd.getEndMinute())) + db.delete(FragmentDatabase.TABLE_DETAIL, selection, selectionArgs) + } + + fun getLectureList(pos: Int): List { + val sql = "select * from $TABLE_DETAIL where day=$pos order by $START_HOUR,$START_MINUTE" + val db = this.getReadableDatabase() + val cursor = db.rawQuery(sql, null) + try { + lecturesList.clear() + while (cursor.moveToNext()) { + val lecture = Lecture() + lecture.setSubjectName(cursor.getString(1)) + lecture.setStartTime(String.format(Locale.US, "%02d:%02d", cursor.getInt(2), cursor.getInt(3))) + lecture.setEndTime(String.format(Locale.US, "%02d:%02d", cursor.getInt(4), cursor.getInt(5))) + lecture.setDay(cursor.getInt(0)) + lecture.setRoomNo(cursor.getString(6)) + lecturesList.add(lecture) + } + } catch (e: Exception) { + } finally { + cursor.close() + } + db.close() + return lecturesList + } + + companion object { + + private val TAG = "FragmentDatabase" + private val DATABASE_VERSION = 1 + private val DATABASE_NAME = "lecture.db" + private val TABLE_DETAIL = "lectureDetails" + private val DAY = "day" + private val SUBJECT = "subject" + private val START_HOUR = "startHour" + private val END_HOUR = "endHour" + private val START_MINUTE = "startMinute" + private val END_MINUTE = "endMinute" + private val ROOM_NUMBER = "roomNo" + private val CREATE_TABLE = ("create table " + + TABLE_DETAIL + "(" + DAY + " integer not null, " + SUBJECT + " varchar not null," + + START_HOUR + " integer not null," + START_MINUTE + " integer not null," + + END_HOUR + " integer not null," + END_MINUTE + " integer not null," + ROOM_NUMBER + " varchar not null);") + } +} \ No newline at end of file diff --git a/app/src/main/java/com/nealgosalia/timetable/database/FragmentDetails.java b/app/src/main/java/com/nealgosalia/timetable/database/FragmentDetails.java deleted file mode 100644 index 7082d9c..0000000 --- a/app/src/main/java/com/nealgosalia/timetable/database/FragmentDetails.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.nealgosalia.timetable.database; - -/** - * Created by men_in_black007 on 10/12/16. - */ - -public class FragmentDetails { - - private int day; - private String subject; - private int startHour; - private int endHour; - private int startMinute; - private int endMinute; - private String roomNo; - - public FragmentDetails(int day, String subject, int startHour, int startMinute, int endHour, int endMinute, String roomNo) { - this.day = day; - this.subject = subject; - this.startHour = startHour; - this.startMinute = startMinute; - this.endHour = endHour; - this.endMinute = endMinute; - this.roomNo = roomNo; - } - - public int getDay() { - return day; - } - - public String getSubject() { - return subject; - } - - public int getStartHour() { - return startHour; - } - - public int getEndHour() { - return endHour; - } - - public int getStartMinute() { - return startMinute; - } - - public int getEndMinute() { - return endMinute; - } - public String getRoomNo(){ - return roomNo; - } -} \ No newline at end of file diff --git a/app/src/main/java/com/nealgosalia/timetable/database/FragmentDetails.kt b/app/src/main/java/com/nealgosalia/timetable/database/FragmentDetails.kt new file mode 100644 index 0000000..767e108 --- /dev/null +++ b/app/src/main/java/com/nealgosalia/timetable/database/FragmentDetails.kt @@ -0,0 +1,7 @@ +package com.nealgosalia.timetable.database + +/** + * Created by men_in_black007 on 10/12/16. + */ + +class FragmentDetails(val day: Int, val subject: String, val startHour: Int, val startMinute: Int, val endHour: Int, val endMinute: Int, val roomNo: String) \ No newline at end of file diff --git a/app/src/main/java/com/nealgosalia/timetable/database/SubjectDatabase.java b/app/src/main/java/com/nealgosalia/timetable/database/SubjectDatabase.java deleted file mode 100644 index 4e30e49..0000000 --- a/app/src/main/java/com/nealgosalia/timetable/database/SubjectDatabase.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.nealgosalia.timetable.database; - -import android.content.ContentValues; -import android.content.Context; -import android.database.Cursor; -import android.database.SQLException; -import android.database.sqlite.SQLiteDatabase; -import android.database.sqlite.SQLiteOpenHelper; -import android.util.Log; - -import java.util.ArrayList; - -/** - * Created by men_in_black007 on 11/12/16. - */ - -public class SubjectDatabase extends SQLiteOpenHelper { - - private static final String TAG = "SubjectDatabase"; - private static final int DATABASE_VERSION = 1; - private static final String DATABASE_NAME = "subject.db"; - private static final String TABLE_DETAIL = "subject"; - private static final String SUBJECT = "subjectName"; - private static final String ATT_LECTURES = "att_lectures"; - private static final String TOT_LECTURES = "tot_lectures"; - private static final String CREATE_TABLE = "create table " + TABLE_DETAIL + "(" + SUBJECT + " varchar, " + ATT_LECTURES + " int, " + TOT_LECTURES + " int);"; - - public SubjectDatabase(Context context) { - super(context, DATABASE_NAME, null, DATABASE_VERSION); - } - - @Override - public void onCreate(SQLiteDatabase db) { - db.execSQL(CREATE_TABLE); - } - - @Override - public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { - db.execSQL("DROP TABLE IF EXISTS " + TABLE_DETAIL); - onCreate(db); - } - - public void addSubject(SubjectDetails sd) { - SQLiteDatabase db = this.getWritableDatabase(); - ContentValues values = new ContentValues(); - values.put(SUBJECT, sd.getSubject()); - values.put(ATT_LECTURES, sd.getAttendedLectures()); - values.put(TOT_LECTURES, sd.getTotalLectures()); - db.insert(TABLE_DETAIL, null, values); - db.close(); - } - - public void removeSubject(SubjectDetails sd) { - SQLiteDatabase db = this.getWritableDatabase(); - String selection = SubjectDatabase.SUBJECT + " LIKE ?"; - String[] selectionArgs = {sd.getSubject()}; - db.delete(SubjectDatabase.TABLE_DETAIL, selection, selectionArgs); - } - - public void updateSubject(SubjectDetails sd) { - SQLiteDatabase db = this.getWritableDatabase(); - ContentValues values = new ContentValues(); - Log.d("SubjectDatabase", sd.getAttendedLectures() + " " + sd.getTotalLectures()); - values.put(ATT_LECTURES, sd.getAttendedLectures()); - values.put(TOT_LECTURES, sd.getTotalLectures()); - String[] args = new String[]{sd.getSubject()}; - db.update(TABLE_DETAIL, values, SUBJECT + " LIKE ?", args); - } - - public ArrayList getSubjectDetail() { - ArrayList allSubjects = new ArrayList(); - String sql = "select distinct * from " + TABLE_DETAIL + " order by " + SUBJECT; - SQLiteDatabase db = this.getReadableDatabase(); - Cursor c = db.rawQuery(sql, null); - try { - while (c.moveToNext()) { - SubjectDetails subjectDetails = new SubjectDetails(); - subjectDetails.setSubject(c.getString(c.getColumnIndex(SUBJECT))); - subjectDetails.setAttendedLectures(c.getInt(c.getColumnIndex(ATT_LECTURES))); - subjectDetails.setTotalLectures(c.getInt(c.getColumnIndex(TOT_LECTURES))); - allSubjects.add(subjectDetails); - } - } catch (SQLException e) { - e.printStackTrace(); - } finally { - c.close(); - } - db.close(); - return allSubjects; - } -} \ No newline at end of file diff --git a/app/src/main/java/com/nealgosalia/timetable/database/SubjectDatabase.kt b/app/src/main/java/com/nealgosalia/timetable/database/SubjectDatabase.kt new file mode 100644 index 0000000..663ccde --- /dev/null +++ b/app/src/main/java/com/nealgosalia/timetable/database/SubjectDatabase.kt @@ -0,0 +1,91 @@ +package com.nealgosalia.timetable.database + +import android.content.ContentValues +import android.content.Context +import android.database.Cursor +import android.database.SQLException +import android.database.sqlite.SQLiteDatabase +import android.database.sqlite.SQLiteOpenHelper +import android.util.Log + +import java.util.ArrayList + +/** + * Created by men_in_black007 on 11/12/16. + */ + +class SubjectDatabase(context: Context) : SQLiteOpenHelper(context, DATABASE_NAME, null, DATABASE_VERSION) { + + val subjectDetail: ArrayList + get() { + val allSubjects = ArrayList() + val sql = "select distinct * from $TABLE_DETAIL order by $SUBJECT" + val db = this.getReadableDatabase() + val c = db.rawQuery(sql, null) + try { + while (c.moveToNext()) { + val subjectDetails = SubjectDetails() + subjectDetails.setSubject(c.getString(c.getColumnIndex(SUBJECT))) + subjectDetails.setAttendedLectures(c.getInt(c.getColumnIndex(ATT_LECTURES))) + subjectDetails.setTotalLectures(c.getInt(c.getColumnIndex(TOT_LECTURES))) + allSubjects.add(subjectDetails) + } + } catch (e: SQLException) { + e.printStackTrace() + } finally { + c.close() + } + db.close() + return allSubjects + } + + @Override + fun onCreate(db: SQLiteDatabase) { + db.execSQL(CREATE_TABLE) + } + + @Override + fun onUpgrade(db: SQLiteDatabase, oldVersion: Int, newVersion: Int) { + db.execSQL("DROP TABLE IF EXISTS $TABLE_DETAIL") + onCreate(db) + } + + fun addSubject(sd: SubjectDetails) { + val db = this.getWritableDatabase() + val values = ContentValues() + values.put(SUBJECT, sd.getSubject()) + values.put(ATT_LECTURES, sd.getAttendedLectures()) + values.put(TOT_LECTURES, sd.getTotalLectures()) + db.insert(TABLE_DETAIL, null, values) + db.close() + } + + fun removeSubject(sd: SubjectDetails) { + val db = this.getWritableDatabase() + val selection = SubjectDatabase.SUBJECT + " LIKE ?" + val selectionArgs = arrayOf(sd.getSubject()) + db.delete(SubjectDatabase.TABLE_DETAIL, selection, selectionArgs) + } + + fun updateSubject(sd: SubjectDetails) { + val db = this.getWritableDatabase() + val values = ContentValues() + Log.d("SubjectDatabase", sd.getAttendedLectures() + " " + sd.getTotalLectures()) + values.put(ATT_LECTURES, sd.getAttendedLectures()) + values.put(TOT_LECTURES, sd.getTotalLectures()) + val args = arrayOf(sd.getSubject()) + db.update(TABLE_DETAIL, values, "$SUBJECT LIKE ?", args) + } + + companion object { + + private val TAG = "SubjectDatabase" + private val DATABASE_VERSION = 1 + private val DATABASE_NAME = "subject.db" + private val TABLE_DETAIL = "subject" + private val SUBJECT = "subjectName" + private val ATT_LECTURES = "att_lectures" + private val TOT_LECTURES = "tot_lectures" + private val CREATE_TABLE = "create table $TABLE_DETAIL($SUBJECT varchar, $ATT_LECTURES int, $TOT_LECTURES int);" + } +} \ No newline at end of file diff --git a/app/src/main/java/com/nealgosalia/timetable/database/SubjectDetails.java b/app/src/main/java/com/nealgosalia/timetable/database/SubjectDetails.java deleted file mode 100644 index ba941e3..0000000 --- a/app/src/main/java/com/nealgosalia/timetable/database/SubjectDetails.java +++ /dev/null @@ -1,45 +0,0 @@ -package com.nealgosalia.timetable.database; - -/** - * Created by men_in_black007 on 11/12/16. - */ - -public class SubjectDetails { - - private String subject; - private int attendedLectures; - private int totalLectures; - - public SubjectDetails() { - } - - public int getAttendedLectures() { - return attendedLectures; - } - - public void setAttendedLectures(int attendedLectures) { - this.attendedLectures = attendedLectures; - } - - public int getTotalLectures() { - return totalLectures; - } - - public void setTotalLectures(int totalLectures) { - this.totalLectures = totalLectures; - } - - public SubjectDetails(String subject, int attendedLectures, int totalLectures) { - this.subject = subject; - this.attendedLectures = attendedLectures; - this.totalLectures = totalLectures; - } - - public String getSubject() { - return subject; - } - - public void setSubject(String subject) { - this.subject = subject; - } -} \ No newline at end of file diff --git a/app/src/main/java/com/nealgosalia/timetable/database/SubjectDetails.kt b/app/src/main/java/com/nealgosalia/timetable/database/SubjectDetails.kt new file mode 100644 index 0000000..e6f8ab3 --- /dev/null +++ b/app/src/main/java/com/nealgosalia/timetable/database/SubjectDetails.kt @@ -0,0 +1,20 @@ +package com.nealgosalia.timetable.database + +/** + * Created by men_in_black007 on 11/12/16. + */ + +class SubjectDetails { + + var subject: String? = null + var attendedLectures: Int = 0 + var totalLectures: Int = 0 + + constructor() {} + + constructor(subject: String, attendedLectures: Int, totalLectures: Int) { + this.subject = subject + this.attendedLectures = attendedLectures + this.totalLectures = totalLectures + } +} \ No newline at end of file diff --git a/app/src/main/java/com/nealgosalia/timetable/fragments/AttendanceFragment.java b/app/src/main/java/com/nealgosalia/timetable/fragments/AttendanceFragment.java deleted file mode 100644 index a35b6c4..0000000 --- a/app/src/main/java/com/nealgosalia/timetable/fragments/AttendanceFragment.java +++ /dev/null @@ -1,192 +0,0 @@ -package com.nealgosalia.timetable.fragments; - -import android.app.AlertDialog; -import android.content.DialogInterface; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.Canvas; -import android.graphics.Color; -import android.graphics.Paint; -import android.graphics.RectF; -import android.os.Bundle; -import android.support.v4.app.Fragment; -import android.support.v7.widget.DefaultItemAnimator; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; -import android.support.v7.widget.helper.ItemTouchHelper; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import com.nealgosalia.timetable.R; -import com.nealgosalia.timetable.adapters.AttendanceAdapter; -import com.nealgosalia.timetable.database.SubjectDatabase; -import com.nealgosalia.timetable.database.SubjectDetails; -import com.nealgosalia.timetable.utils.DividerItemDecoration; -import com.nealgosalia.timetable.utils.RecyclerItemClickListener; -import com.nealgosalia.timetable.utils.Subject; -import com.shawnlin.numberpicker.NumberPicker; - -import java.util.ArrayList; -import java.util.List; - -public class AttendanceFragment extends Fragment { - - private List subjectsList = new ArrayList<>(); - private RecyclerView listSubjects; - private AttendanceAdapter mAttendanceAdapter; - private SubjectDatabase subjectDatabase; - private TextView placeholderText; - private View view; - private List progressList = new ArrayList<>(); - private Paint p = new Paint(); - - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { - view = inflater.inflate(R.layout.fragment_attendance, container, false); - listSubjects = view.findViewById(R.id.listAttendance); - placeholderText = view.findViewById(R.id.attendancePlaceholderText); - subjectDatabase = new SubjectDatabase(getActivity()); - subjectsList.clear(); - for (SubjectDetails subjectDetails : subjectDatabase.getSubjectDetail()) { - int progress; - Subject subject = new Subject(); - subject.setSubjectName(subjectDetails.getSubject()); - subject.setAttendedLectures(subjectDetails.getAttendedLectures()); - subject.setTotalLectures(subjectDetails.getTotalLectures()); - if (subjectDetails.getTotalLectures() != 0) { - progress = (subjectDetails.getAttendedLectures() * 100 / subjectDetails.getTotalLectures()); - } else { - progress = 0; - } - progressList.add(progress); - subjectsList.add(subject); - } - if (subjectsList.size() != 0) { - placeholderText.setVisibility(View.GONE); - } - mAttendanceAdapter = new AttendanceAdapter(subjectsList, progressList); - RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getActivity()); - listSubjects.setLayoutManager(mLayoutManager); - listSubjects.setItemAnimator(new DefaultItemAnimator()); - listSubjects.addItemDecoration(new DividerItemDecoration(getActivity(), LinearLayoutManager.VERTICAL)); - listSubjects.setAdapter(mAttendanceAdapter); - listSubjects.addOnItemTouchListener(new RecyclerItemClickListener(getContext(), new RecyclerItemClickListener.OnItemClickListener() { - @Override - public void onItemClick(View view, int position) { - Subject subject = subjectsList.get(position); - showAttendanceDialog(subject, position); - } - })); - initSwipe(); - return view; - } - - private void initSwipe() { - ItemTouchHelper.SimpleCallback simpleItemTouchCallback = new ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT) { - @Override - public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) { - return false; - } - - @Override - public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) { - int position = viewHolder.getAdapterPosition(); - Subject subjectNew = new Subject(); - int attended = subjectsList.get(position).getAttendedLectures(); - int total = subjectsList.get(position).getTotalLectures(); - int progress; - if (direction == ItemTouchHelper.LEFT) { - progress = attended * 100 / (++total); - } else { - progress = (++attended) * 100 / (++total); - } - subjectNew.setSubjectName(subjectsList.get(position).getSubjectName()); - subjectNew.setAttendedLectures(attended); - subjectNew.setTotalLectures(total); - SubjectDetails sdNew = new SubjectDetails(); - sdNew.setSubject(subjectNew.getSubjectName()); - sdNew.setAttendedLectures(subjectNew.getAttendedLectures()); - sdNew.setTotalLectures(subjectNew.getTotalLectures()); - subjectDatabase.updateSubject(sdNew); - progressList.set(position, progress); - subjectsList.set(position, subjectNew); - mAttendanceAdapter.notifyDataSetChanged(); - } - - @Override - public void onChildDraw(Canvas c, RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState, boolean isCurrentlyActive) { - - Bitmap icon; - if (actionState == ItemTouchHelper.ACTION_STATE_SWIPE) { - - View itemView = viewHolder.itemView; - float height = (float) itemView.getBottom() - (float) itemView.getTop(); - float width = height / 3; - - if (dX > 0) { - p.setColor(Color.parseColor("#4CAF50")); - RectF background = new RectF((float) itemView.getLeft(), (float) itemView.getTop(), dX, (float) itemView.getBottom()); - c.drawRect(background, p); - icon = BitmapFactory.decodeResource(getResources(), R.drawable.ic_done); - RectF icon_dest = new RectF((float) itemView.getLeft() + width, (float) itemView.getTop() + width, (float) itemView.getLeft() + 2 * width, (float) itemView.getBottom() - width); - c.drawBitmap(icon, null, icon_dest, p); - } else if (dX < 0) { - p.setColor(Color.parseColor("#F44336")); - RectF background = new RectF((float) itemView.getRight() + dX, (float) itemView.getTop(), (float) itemView.getRight(), (float) itemView.getBottom()); - c.drawRect(background, p); - icon = BitmapFactory.decodeResource(getResources(), R.drawable.ic_clear); - RectF icon_dest = new RectF((float) itemView.getRight() - 2 * width, (float) itemView.getTop() + width, (float) itemView.getRight() - width, (float) itemView.getBottom() - width); - c.drawBitmap(icon, null, icon_dest, p); - } - } - super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive); - } - }; - ItemTouchHelper itemTouchHelper = new ItemTouchHelper(simpleItemTouchCallback); - itemTouchHelper.attachToRecyclerView(listSubjects); - } - - public void showAttendanceDialog(final Subject subject, final int position) { - AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(getContext()); - LayoutInflater inflater = getActivity().getLayoutInflater(); - final View dialogView = inflater.inflate(R.layout.dialog_edit_attendance, null); - final NumberPicker attendedLecturesNumberPicker = dialogView.findViewById(R.id.attendedLecturesNumberPicker); - final NumberPicker totalLecturesNumberPicker = dialogView.findViewById(R.id.totalLecturesNumberPicker); - attendedLecturesNumberPicker.setValue(subject.getAttendedLectures()); - totalLecturesNumberPicker.setValue(subject.getTotalLectures()); - //int attendedLectures = attendedLecturesNumberPicker.getValue(); - //int totalLectures = ; - attendedLecturesNumberPicker.setMaxValue(totalLecturesNumberPicker.getValue()); - totalLecturesNumberPicker.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() { - @Override - public void onValueChange(NumberPicker numberPicker, int i, int i1) { - attendedLecturesNumberPicker.setMaxValue(totalLecturesNumberPicker.getValue()); - } - }); - dialogBuilder.setView(dialogView); - dialogBuilder.setTitle(getResources().getString(R.string.attendance) + ": " + subject.getSubjectName()); - dialogBuilder.setPositiveButton(getResources().getString(R.string.save), new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int whichButton) { - int attendedLectures = attendedLecturesNumberPicker.getValue(); - int totalLectures = totalLecturesNumberPicker.getValue(); - SubjectDetails subjectDetails = new SubjectDetails( - subject.getSubjectName(), - attendedLectures, - totalLectures - ); - subjectDatabase.updateSubject(subjectDetails); - progressList.set(position, attendedLectures * 100 / totalLectures); - subject.setAttendedLectures(attendedLectures); - subject.setTotalLectures(totalLectures); - subjectsList.set(position, subject); - mAttendanceAdapter.notifyDataSetChanged(); - } - }); - dialogBuilder.setNegativeButton(getResources().getString(R.string.cancel), null); - AlertDialog b = dialogBuilder.create(); - b.show(); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/nealgosalia/timetable/fragments/AttendanceFragment.kt b/app/src/main/java/com/nealgosalia/timetable/fragments/AttendanceFragment.kt new file mode 100644 index 0000000..c7d36bf --- /dev/null +++ b/app/src/main/java/com/nealgosalia/timetable/fragments/AttendanceFragment.kt @@ -0,0 +1,191 @@ +package com.nealgosalia.timetable.fragments + +import android.app.AlertDialog +import android.content.DialogInterface +import android.graphics.Bitmap +import android.graphics.BitmapFactory +import android.graphics.Canvas +import android.graphics.Color +import android.graphics.Paint +import android.graphics.RectF +import android.os.Bundle +import android.support.v4.app.Fragment +import android.support.v7.widget.DefaultItemAnimator +import android.support.v7.widget.LinearLayoutManager +import android.support.v7.widget.RecyclerView +import android.support.v7.widget.helper.ItemTouchHelper +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView + +import com.nealgosalia.timetable.R +import com.nealgosalia.timetable.adapters.AttendanceAdapter +import com.nealgosalia.timetable.database.SubjectDatabase +import com.nealgosalia.timetable.database.SubjectDetails +import com.nealgosalia.timetable.utils.DividerItemDecoration +import com.nealgosalia.timetable.utils.RecyclerItemClickListener +import com.nealgosalia.timetable.utils.Subject +import com.shawnlin.numberpicker.NumberPicker + +import java.util.ArrayList + +class AttendanceFragment : Fragment() { + + private val subjectsList = ArrayList() + private var listSubjects: RecyclerView? = null + private var mAttendanceAdapter: AttendanceAdapter? = null + private var subjectDatabase: SubjectDatabase? = null + private var placeholderText: TextView? = null + private var view: View? = null + private val progressList = ArrayList() + private val p = Paint() + + @Override + fun onCreateView(inflater: LayoutInflater, container: ViewGroup, + savedInstanceState: Bundle): View? { + view = inflater.inflate(R.layout.fragment_attendance, container, false) + listSubjects = view!!.findViewById(R.id.listAttendance) + placeholderText = view!!.findViewById(R.id.attendancePlaceholderText) + subjectDatabase = SubjectDatabase(getActivity()) + subjectsList.clear() + for (subjectDetails in subjectDatabase!!.getSubjectDetail()) { + val progress: Int + val subject = Subject() + subject.setSubjectName(subjectDetails.getSubject()) + subject.setAttendedLectures(subjectDetails.getAttendedLectures()) + subject.setTotalLectures(subjectDetails.getTotalLectures()) + if (subjectDetails.getTotalLectures() !== 0) { + progress = subjectDetails.getAttendedLectures() * 100 / subjectDetails.getTotalLectures() + } else { + progress = 0 + } + progressList.add(progress) + subjectsList.add(subject) + } + if (subjectsList.size() !== 0) { + placeholderText!!.setVisibility(View.GONE) + } + mAttendanceAdapter = AttendanceAdapter(subjectsList, progressList) + val mLayoutManager = LinearLayoutManager(getActivity()) + listSubjects!!.setLayoutManager(mLayoutManager) + listSubjects!!.setItemAnimator(DefaultItemAnimator()) + listSubjects!!.addItemDecoration(DividerItemDecoration(getActivity(), LinearLayoutManager.VERTICAL)) + listSubjects!!.setAdapter(mAttendanceAdapter) + listSubjects!!.addOnItemTouchListener(RecyclerItemClickListener(getContext(), object : RecyclerItemClickListener.OnItemClickListener() { + @Override + fun onItemClick(view: View, position: Int) { + val subject = subjectsList.get(position) + showAttendanceDialog(subject, position) + } + })) + initSwipe() + return view + } + + private fun initSwipe() { + val simpleItemTouchCallback = object : ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.LEFT or ItemTouchHelper.RIGHT) { + @Override + fun onMove(recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder, target: RecyclerView.ViewHolder): Boolean { + return false + } + + @Override + fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) { + val position = viewHolder.getAdapterPosition() + val subjectNew = Subject() + var attended = subjectsList.get(position).getAttendedLectures() + var total = subjectsList.get(position).getTotalLectures() + val progress: Int + if (direction == ItemTouchHelper.LEFT) { + progress = attended * 100 / ++total + } else { + progress = ++attended * 100 / ++total + } + subjectNew.setSubjectName(subjectsList.get(position).getSubjectName()) + subjectNew.setAttendedLectures(attended) + subjectNew.setTotalLectures(total) + val sdNew = SubjectDetails() + sdNew.setSubject(subjectNew.getSubjectName()) + sdNew.setAttendedLectures(subjectNew.getAttendedLectures()) + sdNew.setTotalLectures(subjectNew.getTotalLectures()) + subjectDatabase!!.updateSubject(sdNew) + progressList.set(position, progress) + subjectsList.set(position, subjectNew) + mAttendanceAdapter!!.notifyDataSetChanged() + } + + @Override + fun onChildDraw(c: Canvas, recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder, dX: Float, dY: Float, actionState: Int, isCurrentlyActive: Boolean) { + + val icon: Bitmap + if (actionState == ItemTouchHelper.ACTION_STATE_SWIPE) { + + val itemView = viewHolder.itemView + val height = itemView.getBottom() as Float - itemView.getTop() as Float + val width = height / 3 + + if (dX > 0) { + p.setColor(Color.parseColor("#4CAF50")) + val background = RectF(itemView.getLeft() as Float, itemView.getTop() as Float, dX, itemView.getBottom() as Float) + c.drawRect(background, p) + icon = BitmapFactory.decodeResource(getResources(), R.drawable.ic_done) + val icon_dest = RectF(itemView.getLeft() as Float + width, itemView.getTop() as Float + width, itemView.getLeft() as Float + 2 * width, itemView.getBottom() as Float - width) + c.drawBitmap(icon, null, icon_dest, p) + } else if (dX < 0) { + p.setColor(Color.parseColor("#F44336")) + val background = RectF(itemView.getRight() as Float + dX, itemView.getTop() as Float, itemView.getRight() as Float, itemView.getBottom() as Float) + c.drawRect(background, p) + icon = BitmapFactory.decodeResource(getResources(), R.drawable.ic_clear) + val icon_dest = RectF(itemView.getRight() as Float - 2 * width, itemView.getTop() as Float + width, itemView.getRight() as Float - width, itemView.getBottom() as Float - width) + c.drawBitmap(icon, null, icon_dest, p) + } + } + super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive) + } + } + val itemTouchHelper = ItemTouchHelper(simpleItemTouchCallback) + itemTouchHelper.attachToRecyclerView(listSubjects) + } + + fun showAttendanceDialog(subject: Subject, position: Int) { + val dialogBuilder = AlertDialog.Builder(getContext()) + val inflater = getActivity().getLayoutInflater() + val dialogView = inflater.inflate(R.layout.dialog_edit_attendance, null) + val attendedLecturesNumberPicker = dialogView.findViewById(R.id.attendedLecturesNumberPicker) + val totalLecturesNumberPicker = dialogView.findViewById(R.id.totalLecturesNumberPicker) + attendedLecturesNumberPicker.setValue(subject.getAttendedLectures()) + totalLecturesNumberPicker.setValue(subject.getTotalLectures()) + //int attendedLectures = attendedLecturesNumberPicker.getValue(); + //int totalLectures = ; + attendedLecturesNumberPicker.setMaxValue(totalLecturesNumberPicker.getValue()) + totalLecturesNumberPicker.setOnValueChangedListener(object : NumberPicker.OnValueChangeListener() { + @Override + fun onValueChange(numberPicker: NumberPicker, i: Int, i1: Int) { + attendedLecturesNumberPicker.setMaxValue(totalLecturesNumberPicker.getValue()) + } + }) + dialogBuilder.setView(dialogView) + dialogBuilder.setTitle(getResources().getString(R.string.attendance) + ": " + subject.getSubjectName()) + dialogBuilder.setPositiveButton(getResources().getString(R.string.save), object : DialogInterface.OnClickListener() { + fun onClick(dialog: DialogInterface, whichButton: Int) { + val attendedLectures = attendedLecturesNumberPicker.getValue() + val totalLectures = totalLecturesNumberPicker.getValue() + val subjectDetails = SubjectDetails( + subject.getSubjectName(), + attendedLectures, + totalLectures + ) + subjectDatabase!!.updateSubject(subjectDetails) + progressList.set(position, attendedLectures * 100 / totalLectures) + subject.setAttendedLectures(attendedLectures) + subject.setTotalLectures(totalLectures) + subjectsList.set(position, subject) + mAttendanceAdapter!!.notifyDataSetChanged() + } + }) + dialogBuilder.setNegativeButton(getResources().getString(R.string.cancel), null) + val b = dialogBuilder.create() + b.show() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/nealgosalia/timetable/fragments/FridayFragment.java b/app/src/main/java/com/nealgosalia/timetable/fragments/FridayFragment.java deleted file mode 100644 index 6f96236..0000000 --- a/app/src/main/java/com/nealgosalia/timetable/fragments/FridayFragment.java +++ /dev/null @@ -1,85 +0,0 @@ -package com.nealgosalia.timetable.fragments; - -import android.app.AlertDialog; -import android.content.DialogInterface; -import android.os.Bundle; -import android.support.v4.app.Fragment; -import android.support.v7.widget.DefaultItemAnimator; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import com.nealgosalia.timetable.R; -import com.nealgosalia.timetable.adapters.LecturesAdapter; -import com.nealgosalia.timetable.database.FragmentDatabase; -import com.nealgosalia.timetable.database.FragmentDetails; -import com.nealgosalia.timetable.utils.DividerItemDecoration; -import com.nealgosalia.timetable.utils.Lecture; -import com.nealgosalia.timetable.utils.RecyclerItemClickListener; - -import java.util.ArrayList; -import java.util.List; - -public class FridayFragment extends Fragment { - - private FragmentDatabase db; - private List lecturesList = new ArrayList<>(); - private RecyclerView recyclerLectures; - private LecturesAdapter mLectureAdapter; - private TextView placeholderText; - private View view; - - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { - view = inflater.inflate(R.layout.fragment_friday, container, false); - placeholderText = view.findViewById(R.id.fridayPlaceholderText); - db = new FragmentDatabase(getActivity()); - lecturesList = new ArrayList<>(db.getLectureList(4)); - if (lecturesList.size() != 0) { - placeholderText.setVisibility(View.GONE); - } - recyclerLectures = view.findViewById(R.id.listFriday); - mLectureAdapter = new LecturesAdapter(lecturesList); - RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getActivity()); - recyclerLectures.setLayoutManager(mLayoutManager); - recyclerLectures.setItemAnimator(new DefaultItemAnimator()); - recyclerLectures.addItemDecoration(new DividerItemDecoration(getContext(), LinearLayoutManager.VERTICAL)); - recyclerLectures.setAdapter(mLectureAdapter); - recyclerLectures.addOnItemTouchListener(new RecyclerItemClickListener(getContext(), new RecyclerItemClickListener.OnItemClickListener() { - @Override public void onItemClick(View view, int position) { - Lecture lecture = lecturesList.get(position); - showDeleteDialog(lecture, position); - } - })); - return view; - } - - public void showDeleteDialog(final Lecture lecture, final int position) { - AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(getContext()); - dialogBuilder.setTitle(getResources().getString(R.string.delete)); - dialogBuilder.setMessage(getResources().getString(R.string.delete_lecture)); - dialogBuilder.setPositiveButton(getResources().getString(R.string.yes), new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int whichButton) { - FragmentDetails fd = new FragmentDetails( - lecture.getDay(), - lecture.getSubjectName(), - Integer.parseInt(lecture.getStartTime().substring(0,2)), - Integer.parseInt(lecture.getStartTime().substring(3,5)), - Integer.parseInt(lecture.getEndTime().substring(0,2)), - Integer.parseInt(lecture.getEndTime().substring(3,5)), - lecture.getRoomNo() - ); - db.remove(fd); - lecturesList.remove(position); - mLectureAdapter.notifyDataSetChanged(); - } - }); - dialogBuilder.setNegativeButton(getResources().getString(R.string.no), null); - AlertDialog b = dialogBuilder.create(); - b.show(); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/nealgosalia/timetable/fragments/FridayFragment.kt b/app/src/main/java/com/nealgosalia/timetable/fragments/FridayFragment.kt new file mode 100644 index 0000000..6165d4f --- /dev/null +++ b/app/src/main/java/com/nealgosalia/timetable/fragments/FridayFragment.kt @@ -0,0 +1,85 @@ +package com.nealgosalia.timetable.fragments + +import android.app.AlertDialog +import android.content.DialogInterface +import android.os.Bundle +import android.support.v4.app.Fragment +import android.support.v7.widget.DefaultItemAnimator +import android.support.v7.widget.LinearLayoutManager +import android.support.v7.widget.RecyclerView +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView + +import com.nealgosalia.timetable.R +import com.nealgosalia.timetable.adapters.LecturesAdapter +import com.nealgosalia.timetable.database.FragmentDatabase +import com.nealgosalia.timetable.database.FragmentDetails +import com.nealgosalia.timetable.utils.DividerItemDecoration +import com.nealgosalia.timetable.utils.Lecture +import com.nealgosalia.timetable.utils.RecyclerItemClickListener + +import java.util.ArrayList + +class FridayFragment : Fragment() { + + private var db: FragmentDatabase? = null + private var lecturesList: List = ArrayList() + private var recyclerLectures: RecyclerView? = null + private var mLectureAdapter: LecturesAdapter? = null + private var placeholderText: TextView? = null + private var view: View? = null + + @Override + fun onCreateView(inflater: LayoutInflater, container: ViewGroup, + savedInstanceState: Bundle): View? { + view = inflater.inflate(R.layout.fragment_friday, container, false) + placeholderText = view!!.findViewById(R.id.fridayPlaceholderText) + db = FragmentDatabase(getActivity()) + lecturesList = ArrayList(db!!.getLectureList(4)) + if (lecturesList.size() !== 0) { + placeholderText!!.setVisibility(View.GONE) + } + recyclerLectures = view!!.findViewById(R.id.listFriday) + mLectureAdapter = LecturesAdapter(lecturesList) + val mLayoutManager = LinearLayoutManager(getActivity()) + recyclerLectures!!.setLayoutManager(mLayoutManager) + recyclerLectures!!.setItemAnimator(DefaultItemAnimator()) + recyclerLectures!!.addItemDecoration(DividerItemDecoration(getContext(), LinearLayoutManager.VERTICAL)) + recyclerLectures!!.setAdapter(mLectureAdapter) + recyclerLectures!!.addOnItemTouchListener(RecyclerItemClickListener(getContext(), object : RecyclerItemClickListener.OnItemClickListener() { + @Override + fun onItemClick(view: View, position: Int) { + val lecture = lecturesList[position] + showDeleteDialog(lecture, position) + } + })) + return view + } + + fun showDeleteDialog(lecture: Lecture, position: Int) { + val dialogBuilder = AlertDialog.Builder(getContext()) + dialogBuilder.setTitle(getResources().getString(R.string.delete)) + dialogBuilder.setMessage(getResources().getString(R.string.delete_lecture)) + dialogBuilder.setPositiveButton(getResources().getString(R.string.yes), object : DialogInterface.OnClickListener() { + fun onClick(dialog: DialogInterface, whichButton: Int) { + val fd = FragmentDetails( + lecture.getDay(), + lecture.getSubjectName(), + Integer.parseInt(lecture.getStartTime().substring(0, 2)), + Integer.parseInt(lecture.getStartTime().substring(3, 5)), + Integer.parseInt(lecture.getEndTime().substring(0, 2)), + Integer.parseInt(lecture.getEndTime().substring(3, 5)), + lecture.getRoomNo() + ) + db!!.remove(fd) + lecturesList.remove(position) + mLectureAdapter!!.notifyDataSetChanged() + } + }) + dialogBuilder.setNegativeButton(getResources().getString(R.string.no), null) + val b = dialogBuilder.create() + b.show() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/nealgosalia/timetable/fragments/MondayFragment.java b/app/src/main/java/com/nealgosalia/timetable/fragments/MondayFragment.java deleted file mode 100644 index e9b1206..0000000 --- a/app/src/main/java/com/nealgosalia/timetable/fragments/MondayFragment.java +++ /dev/null @@ -1,85 +0,0 @@ -package com.nealgosalia.timetable.fragments; - -import android.app.AlertDialog; -import android.content.DialogInterface; -import android.os.Bundle; -import android.support.v4.app.Fragment; -import android.support.v7.widget.DefaultItemAnimator; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import com.nealgosalia.timetable.R; -import com.nealgosalia.timetable.adapters.LecturesAdapter; -import com.nealgosalia.timetable.database.FragmentDatabase; -import com.nealgosalia.timetable.database.FragmentDetails; -import com.nealgosalia.timetable.utils.DividerItemDecoration; -import com.nealgosalia.timetable.utils.Lecture; -import com.nealgosalia.timetable.utils.RecyclerItemClickListener; - -import java.util.ArrayList; -import java.util.List; - -public class MondayFragment extends Fragment { - - private FragmentDatabase db; - private List lecturesList = new ArrayList<>(); - private RecyclerView recyclerLectures; - private LecturesAdapter mLectureAdapter; - private TextView placeholderText; - private View view; - - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { - view = inflater.inflate(R.layout.fragment_monday, container, false); - placeholderText = view.findViewById(R.id.mondayPlaceholderText); - db = new FragmentDatabase(getActivity()); - lecturesList = new ArrayList<>(db.getLectureList(0)); - if (lecturesList.size() != 0) { - placeholderText.setVisibility(View.GONE); - } - recyclerLectures = view.findViewById(R.id.listMonday); - mLectureAdapter = new LecturesAdapter(lecturesList); - RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getActivity()); - recyclerLectures.setLayoutManager(mLayoutManager); - recyclerLectures.setItemAnimator(new DefaultItemAnimator()); - recyclerLectures.addItemDecoration(new DividerItemDecoration(getContext(), LinearLayoutManager.VERTICAL)); - recyclerLectures.setAdapter(mLectureAdapter); - recyclerLectures.addOnItemTouchListener(new RecyclerItemClickListener(getContext(), new RecyclerItemClickListener.OnItemClickListener() { - @Override public void onItemClick(View view, int position) { - Lecture lecture = lecturesList.get(position); - showDeleteDialog(lecture, position); - } - })); - return view; - } - - public void showDeleteDialog(final Lecture lecture, final int position) { - AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(getContext()); - dialogBuilder.setTitle(getResources().getString(R.string.delete)); - dialogBuilder.setMessage(getResources().getString(R.string.delete_lecture)); - dialogBuilder.setPositiveButton(getResources().getString(R.string.yes), new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int whichButton) { - FragmentDetails fd = new FragmentDetails( - lecture.getDay(), - lecture.getSubjectName(), - Integer.parseInt(lecture.getStartTime().substring(0,2)), - Integer.parseInt(lecture.getStartTime().substring(3,5)), - Integer.parseInt(lecture.getEndTime().substring(0,2)), - Integer.parseInt(lecture.getEndTime().substring(3,5)), - lecture.getRoomNo() - ); - db.remove(fd); - lecturesList.remove(position); - mLectureAdapter.notifyDataSetChanged(); - } - }); - dialogBuilder.setNegativeButton(getResources().getString(R.string.no), null); - AlertDialog b = dialogBuilder.create(); - b.show(); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/nealgosalia/timetable/fragments/MondayFragment.kt b/app/src/main/java/com/nealgosalia/timetable/fragments/MondayFragment.kt new file mode 100644 index 0000000..f528c6f --- /dev/null +++ b/app/src/main/java/com/nealgosalia/timetable/fragments/MondayFragment.kt @@ -0,0 +1,85 @@ +package com.nealgosalia.timetable.fragments + +import android.app.AlertDialog +import android.content.DialogInterface +import android.os.Bundle +import android.support.v4.app.Fragment +import android.support.v7.widget.DefaultItemAnimator +import android.support.v7.widget.LinearLayoutManager +import android.support.v7.widget.RecyclerView +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView + +import com.nealgosalia.timetable.R +import com.nealgosalia.timetable.adapters.LecturesAdapter +import com.nealgosalia.timetable.database.FragmentDatabase +import com.nealgosalia.timetable.database.FragmentDetails +import com.nealgosalia.timetable.utils.DividerItemDecoration +import com.nealgosalia.timetable.utils.Lecture +import com.nealgosalia.timetable.utils.RecyclerItemClickListener + +import java.util.ArrayList + +class MondayFragment : Fragment() { + + private var db: FragmentDatabase? = null + private var lecturesList: List = ArrayList() + private var recyclerLectures: RecyclerView? = null + private var mLectureAdapter: LecturesAdapter? = null + private var placeholderText: TextView? = null + private var view: View? = null + + @Override + fun onCreateView(inflater: LayoutInflater, container: ViewGroup, + savedInstanceState: Bundle): View? { + view = inflater.inflate(R.layout.fragment_monday, container, false) + placeholderText = view!!.findViewById(R.id.mondayPlaceholderText) + db = FragmentDatabase(getActivity()) + lecturesList = ArrayList(db!!.getLectureList(0)) + if (lecturesList.size() !== 0) { + placeholderText!!.setVisibility(View.GONE) + } + recyclerLectures = view!!.findViewById(R.id.listMonday) + mLectureAdapter = LecturesAdapter(lecturesList) + val mLayoutManager = LinearLayoutManager(getActivity()) + recyclerLectures!!.setLayoutManager(mLayoutManager) + recyclerLectures!!.setItemAnimator(DefaultItemAnimator()) + recyclerLectures!!.addItemDecoration(DividerItemDecoration(getContext(), LinearLayoutManager.VERTICAL)) + recyclerLectures!!.setAdapter(mLectureAdapter) + recyclerLectures!!.addOnItemTouchListener(RecyclerItemClickListener(getContext(), object : RecyclerItemClickListener.OnItemClickListener() { + @Override + fun onItemClick(view: View, position: Int) { + val lecture = lecturesList[position] + showDeleteDialog(lecture, position) + } + })) + return view + } + + fun showDeleteDialog(lecture: Lecture, position: Int) { + val dialogBuilder = AlertDialog.Builder(getContext()) + dialogBuilder.setTitle(getResources().getString(R.string.delete)) + dialogBuilder.setMessage(getResources().getString(R.string.delete_lecture)) + dialogBuilder.setPositiveButton(getResources().getString(R.string.yes), object : DialogInterface.OnClickListener() { + fun onClick(dialog: DialogInterface, whichButton: Int) { + val fd = FragmentDetails( + lecture.getDay(), + lecture.getSubjectName(), + Integer.parseInt(lecture.getStartTime().substring(0, 2)), + Integer.parseInt(lecture.getStartTime().substring(3, 5)), + Integer.parseInt(lecture.getEndTime().substring(0, 2)), + Integer.parseInt(lecture.getEndTime().substring(3, 5)), + lecture.getRoomNo() + ) + db!!.remove(fd) + lecturesList.remove(position) + mLectureAdapter!!.notifyDataSetChanged() + } + }) + dialogBuilder.setNegativeButton(getResources().getString(R.string.no), null) + val b = dialogBuilder.create() + b.show() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/nealgosalia/timetable/fragments/MyPreferenceFragment.java b/app/src/main/java/com/nealgosalia/timetable/fragments/MyPreferenceFragment.java deleted file mode 100644 index 229bd3d..0000000 --- a/app/src/main/java/com/nealgosalia/timetable/fragments/MyPreferenceFragment.java +++ /dev/null @@ -1,209 +0,0 @@ -package com.nealgosalia.timetable.fragments; - -import android.app.AlarmManager; -import android.app.AlertDialog; -import android.content.DialogInterface; -import android.content.Intent; -import android.content.SharedPreferences; -import android.os.Bundle; -import android.os.Environment; -import android.preference.ListPreference; -import android.preference.Preference; -import android.preference.PreferenceFragment; -import android.preference.PreferenceManager; -import android.util.Log; -import android.widget.Toast; - -import com.nealgosalia.timetable.MainActivity; -import com.nealgosalia.timetable.R; -import com.nealgosalia.timetable.activities.PreferencesActivity; -import com.nealgosalia.timetable.utils.Alarms; - -import java.io.File; -import java.util.ArrayList; -import java.util.List; - -import static android.content.Context.ALARM_SERVICE; - -/** - * Created by men_in_black007 on 15/12/16. - */ - -public class MyPreferenceFragment extends PreferenceFragment { - - private static final String TAG = "MyPreferenceFragment"; - private static List alarmsList = new ArrayList<>(); - private PreferencesActivity mActivity; - - @Override - public void onCreate(final Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - addPreferencesFromResource(R.xml.preference); - mActivity = (PreferencesActivity) getActivity(); - ListPreference notificationTime = (ListPreference) findPreference("notificationTime"); - notificationTime.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { - @Override - public boolean onPreferenceChange(Preference preference, Object o) { - SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity()); - SharedPreferences.Editor editor = prefs.edit(); - editor.putString("NOTIFICATION_TIME", (String) o); - editor.apply(); - if (alarmsList.size() != 0) { - for (Alarms alarm : alarmsList) { - AlarmManager alarmManager = (AlarmManager) alarm.getContext().getSystemService(ALARM_SERVICE); - alarmManager.cancel(alarm.getPendingIntent()); - } - } - if (!o.equals("-1")) { - Intent i = new Intent(); - i.setAction("com.nealgosalia.timetable.NOTIFY"); - getActivity().sendBroadcast(i); - Log.d(TAG, "Broadcasted"); - } - return true; - } - }); - SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity()); - SharedPreferences.Editor editor = prefs.edit(); - editor.putString("NOTIFICATION_TIME", notificationTime.getValue()); - editor.apply(); - Preference backup = findPreference("backup"); - Preference restore = findPreference("restore"); - Preference reset = findPreference("reset"); - backup.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { - @Override - public boolean onPreferenceClick(Preference preference) { - if (mActivity.isStoragePermissionGranted(getActivity())) { - final AlertDialog.Builder alertDialog = new AlertDialog.Builder(getActivity()); - alertDialog.setTitle(getResources().getString(R.string.backup)); - alertDialog.setMessage(getResources().getString(R.string.backup_question)); - alertDialog.setPositiveButton(getResources().getString(R.string.yes), new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - String backupDBPath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/Timetable/"; - final File subjectDB = new File(backupDBPath + "subject.db"); - final File lectureDB = new File(backupDBPath + "lecture.db"); - if (!(subjectDB.exists() || lectureDB.exists())) { - if (mActivity.exportDatabase("subject.db") && mActivity.exportDatabase("lecture.db")) { - Toast.makeText(getActivity(), getResources().getString(R.string.backup_successful), Toast.LENGTH_SHORT).show(); - } else { - Toast.makeText(getActivity(), getResources().getString(R.string.please_create_timetable), Toast.LENGTH_SHORT).show(); - } - } else { - AlertDialog overwriteDialog = new AlertDialog.Builder(getActivity()) - .setTitle(getResources().getString(R.string.warning)) - .setMessage(getResources().getString(R.string.overwrite_backup)) - .setPositiveButton(getResources().getString(R.string.yes), new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - subjectDB.delete(); - lectureDB.delete(); - if (mActivity.exportDatabase("subject.db") && mActivity.exportDatabase("lecture.db")) { - Toast.makeText(getActivity(), getResources().getString(R.string.backup_successful), Toast.LENGTH_SHORT).show(); - } else { - Toast.makeText(getActivity(), getResources().getString(R.string.please_create_timetable), Toast.LENGTH_SHORT).show(); - } - } - }) - .setNegativeButton(getResources().getString(R.string.no), null) - .create(); - overwriteDialog.show(); - } - } - }); - alertDialog.setNegativeButton(getResources().getString(R.string.no), null); - alertDialog.show(); - } else { - Toast.makeText(getActivity(), getResources().getString(R.string.no_permission_granted), Toast.LENGTH_SHORT).show(); - } - return false; - } - }); - restore.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { - @Override - public boolean onPreferenceClick(Preference preference) { - if (mActivity.isStoragePermissionGranted(getActivity())) { - AlertDialog.Builder alertDialog = new AlertDialog.Builder(getActivity()); - alertDialog.setTitle(getResources().getString(R.string.restore)); - alertDialog.setMessage(getResources().getString(R.string.restore_question)); - alertDialog.setPositiveButton(getResources().getString(R.string.yes), new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - String backupDBPath = "data/data/com.nealgosalia.timetable/databases/"; - final File subjectDB = new File(backupDBPath + "subject.db"); - final File lectureDB = new File(backupDBPath + "lecture.db"); - if (!(subjectDB.exists() || lectureDB.exists())) { - if (mActivity.importDatabase("subject.db") && mActivity.importDatabase("lecture.db")) { - restartApplication(); - Toast.makeText(getActivity(), getResources().getString(R.string.restore_successful), Toast.LENGTH_SHORT).show(); - } else { - Toast.makeText(getActivity(), getResources().getString(R.string.backup_not_found), Toast.LENGTH_SHORT).show(); - } - } else { - AlertDialog overwriteDialog = new AlertDialog.Builder(getActivity()) - .setTitle(getResources().getString(R.string.warning)) - .setMessage(getResources().getString(R.string.overwrite_timetable)) - .setPositiveButton(getResources().getString(R.string.yes), new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - subjectDB.delete(); - lectureDB.delete(); - if (mActivity.importDatabase("subject.db") && mActivity.importDatabase("lecture.db")) { - restartApplication(); - Toast.makeText(getActivity(), getResources().getString(R.string.restore_successful), Toast.LENGTH_SHORT).show(); - } else { - Toast.makeText(getActivity(), getResources().getString(R.string.backup_not_found), Toast.LENGTH_SHORT).show(); - } - } - }) - .setNegativeButton(getResources().getString(R.string.no), null) - .create(); - overwriteDialog.show(); - } - } - }); - alertDialog.setNegativeButton(getResources().getString(R.string.no), null); - alertDialog.show(); - } else { - Toast.makeText(getActivity(), getResources().getString(R.string.no_permission_granted), Toast.LENGTH_SHORT).show(); - } - return false; - } - }); - reset.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { - @Override - public boolean onPreferenceClick(Preference preference) { - AlertDialog.Builder alertDialog = new AlertDialog.Builder(getActivity()); - alertDialog.setTitle(getResources().getString(R.string.reset_the_timetable)); - alertDialog.setMessage(getResources().getString(R.string.reset_question)); - alertDialog.setPositiveButton(getResources().getString(R.string.yes), new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - String resetDBPath = "data/data/com.nealgosalia.timetable/databases/"; - final File subjectDB = new File(resetDBPath + "subject.db"); - final File lectureDB = new File(resetDBPath + "lecture.db"); - if (subjectDB.exists() && lectureDB.exists()) { - subjectDB.delete(); - lectureDB.delete(); - } - restartApplication(); - Toast.makeText(mActivity, getResources().getString(R.string.reset_successful), Toast.LENGTH_SHORT).show(); - } - }); - alertDialog.setNegativeButton(getResources().getString(R.string.no), null); - alertDialog.show(); - return false; - } - }); - } - - public void addAlarm(Alarms alarm) { - alarmsList.add(alarm); - } - - private void restartApplication() { - Intent intent = new Intent(getActivity(), MainActivity.class); - getActivity().finish(); - startActivity(intent); - } -} diff --git a/app/src/main/java/com/nealgosalia/timetable/fragments/MyPreferenceFragment.kt b/app/src/main/java/com/nealgosalia/timetable/fragments/MyPreferenceFragment.kt new file mode 100644 index 0000000..036c698 --- /dev/null +++ b/app/src/main/java/com/nealgosalia/timetable/fragments/MyPreferenceFragment.kt @@ -0,0 +1,211 @@ +package com.nealgosalia.timetable.fragments + +import android.app.AlarmManager +import android.app.AlertDialog +import android.content.DialogInterface +import android.content.Intent +import android.content.SharedPreferences +import android.os.Bundle +import android.os.Environment +import android.preference.ListPreference +import android.preference.Preference +import android.preference.PreferenceFragment +import android.preference.PreferenceManager +import android.util.Log +import android.widget.Toast + +import com.nealgosalia.timetable.MainActivity +import com.nealgosalia.timetable.R +import com.nealgosalia.timetable.activities.PreferencesActivity +import com.nealgosalia.timetable.utils.Alarms + +import java.io.File +import java.util.ArrayList + +import android.content.Context.ALARM_SERVICE + +/** + * Created by men_in_black007 on 15/12/16. + */ + +class MyPreferenceFragment : PreferenceFragment() { + private var mActivity: PreferencesActivity? = null + + @Override + fun onCreate(savedInstanceState: Bundle) { + super.onCreate(savedInstanceState) + addPreferencesFromResource(R.xml.preference) + mActivity = getActivity() as PreferencesActivity + val notificationTime = findPreference("notificationTime") as ListPreference + notificationTime.setOnPreferenceChangeListener(object : Preference.OnPreferenceChangeListener() { + @Override + fun onPreferenceChange(preference: Preference, o: Object): Boolean { + val prefs = PreferenceManager.getDefaultSharedPreferences(getActivity()) + val editor = prefs.edit() + editor.putString("NOTIFICATION_TIME", o as String) + editor.apply() + if (alarmsList.size() !== 0) { + for (alarm in alarmsList) { + val alarmManager = alarm.getContext().getSystemService(ALARM_SERVICE) as AlarmManager + alarmManager.cancel(alarm.getPendingIntent()) + } + } + if (!o.equals("-1")) { + val i = Intent() + i.setAction("com.nealgosalia.timetable.NOTIFY") + getActivity().sendBroadcast(i) + Log.d(TAG, "Broadcasted") + } + return true + } + }) + val prefs = PreferenceManager.getDefaultSharedPreferences(getActivity()) + val editor = prefs.edit() + editor.putString("NOTIFICATION_TIME", notificationTime.getValue()) + editor.apply() + val backup = findPreference("backup") + val restore = findPreference("restore") + val reset = findPreference("reset") + backup.setOnPreferenceClickListener(object : Preference.OnPreferenceClickListener() { + @Override + fun onPreferenceClick(preference: Preference): Boolean { + if (mActivity!!.isStoragePermissionGranted(getActivity())) { + val alertDialog = AlertDialog.Builder(getActivity()) + alertDialog.setTitle(getResources().getString(R.string.backup)) + alertDialog.setMessage(getResources().getString(R.string.backup_question)) + alertDialog.setPositiveButton(getResources().getString(R.string.yes), object : DialogInterface.OnClickListener() { + @Override + fun onClick(dialog: DialogInterface, which: Int) { + val backupDBPath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/Timetable/" + val subjectDB = File(backupDBPath + "subject.db") + val lectureDB = File(backupDBPath + "lecture.db") + if (!(subjectDB.exists() || lectureDB.exists())) { + if (mActivity!!.exportDatabase("subject.db") && mActivity!!.exportDatabase("lecture.db")) { + Toast.makeText(getActivity(), getResources().getString(R.string.backup_successful), Toast.LENGTH_SHORT).show() + } else { + Toast.makeText(getActivity(), getResources().getString(R.string.please_create_timetable), Toast.LENGTH_SHORT).show() + } + } else { + val overwriteDialog = AlertDialog.Builder(getActivity()) + .setTitle(getResources().getString(R.string.warning)) + .setMessage(getResources().getString(R.string.overwrite_backup)) + .setPositiveButton(getResources().getString(R.string.yes), object : DialogInterface.OnClickListener() { + @Override + fun onClick(dialog: DialogInterface, which: Int) { + subjectDB.delete() + lectureDB.delete() + if (mActivity!!.exportDatabase("subject.db") && mActivity!!.exportDatabase("lecture.db")) { + Toast.makeText(getActivity(), getResources().getString(R.string.backup_successful), Toast.LENGTH_SHORT).show() + } else { + Toast.makeText(getActivity(), getResources().getString(R.string.please_create_timetable), Toast.LENGTH_SHORT).show() + } + } + }) + .setNegativeButton(getResources().getString(R.string.no), null) + .create() + overwriteDialog.show() + } + } + }) + alertDialog.setNegativeButton(getResources().getString(R.string.no), null) + alertDialog.show() + } else { + Toast.makeText(getActivity(), getResources().getString(R.string.no_permission_granted), Toast.LENGTH_SHORT).show() + } + return false + } + }) + restore.setOnPreferenceClickListener(object : Preference.OnPreferenceClickListener() { + @Override + fun onPreferenceClick(preference: Preference): Boolean { + if (mActivity!!.isStoragePermissionGranted(getActivity())) { + val alertDialog = AlertDialog.Builder(getActivity()) + alertDialog.setTitle(getResources().getString(R.string.restore)) + alertDialog.setMessage(getResources().getString(R.string.restore_question)) + alertDialog.setPositiveButton(getResources().getString(R.string.yes), object : DialogInterface.OnClickListener() { + @Override + fun onClick(dialog: DialogInterface, which: Int) { + val backupDBPath = "data/data/com.nealgosalia.timetable/databases/" + val subjectDB = File(backupDBPath + "subject.db") + val lectureDB = File(backupDBPath + "lecture.db") + if (!(subjectDB.exists() || lectureDB.exists())) { + if (mActivity!!.importDatabase("subject.db") && mActivity!!.importDatabase("lecture.db")) { + restartApplication() + Toast.makeText(getActivity(), getResources().getString(R.string.restore_successful), Toast.LENGTH_SHORT).show() + } else { + Toast.makeText(getActivity(), getResources().getString(R.string.backup_not_found), Toast.LENGTH_SHORT).show() + } + } else { + val overwriteDialog = AlertDialog.Builder(getActivity()) + .setTitle(getResources().getString(R.string.warning)) + .setMessage(getResources().getString(R.string.overwrite_timetable)) + .setPositiveButton(getResources().getString(R.string.yes), object : DialogInterface.OnClickListener() { + @Override + fun onClick(dialog: DialogInterface, which: Int) { + subjectDB.delete() + lectureDB.delete() + if (mActivity!!.importDatabase("subject.db") && mActivity!!.importDatabase("lecture.db")) { + restartApplication() + Toast.makeText(getActivity(), getResources().getString(R.string.restore_successful), Toast.LENGTH_SHORT).show() + } else { + Toast.makeText(getActivity(), getResources().getString(R.string.backup_not_found), Toast.LENGTH_SHORT).show() + } + } + }) + .setNegativeButton(getResources().getString(R.string.no), null) + .create() + overwriteDialog.show() + } + } + }) + alertDialog.setNegativeButton(getResources().getString(R.string.no), null) + alertDialog.show() + } else { + Toast.makeText(getActivity(), getResources().getString(R.string.no_permission_granted), Toast.LENGTH_SHORT).show() + } + return false + } + }) + reset.setOnPreferenceClickListener(object : Preference.OnPreferenceClickListener() { + @Override + fun onPreferenceClick(preference: Preference): Boolean { + val alertDialog = AlertDialog.Builder(getActivity()) + alertDialog.setTitle(getResources().getString(R.string.reset_the_timetable)) + alertDialog.setMessage(getResources().getString(R.string.reset_question)) + alertDialog.setPositiveButton(getResources().getString(R.string.yes), object : DialogInterface.OnClickListener() { + @Override + fun onClick(dialog: DialogInterface, which: Int) { + val resetDBPath = "data/data/com.nealgosalia.timetable/databases/" + val subjectDB = File(resetDBPath + "subject.db") + val lectureDB = File(resetDBPath + "lecture.db") + if (subjectDB.exists() && lectureDB.exists()) { + subjectDB.delete() + lectureDB.delete() + } + restartApplication() + Toast.makeText(mActivity, getResources().getString(R.string.reset_successful), Toast.LENGTH_SHORT).show() + } + }) + alertDialog.setNegativeButton(getResources().getString(R.string.no), null) + alertDialog.show() + return false + } + }) + } + + fun addAlarm(alarm: Alarms) { + alarmsList.add(alarm) + } + + private fun restartApplication() { + val intent = Intent(getActivity(), MainActivity::class.java) + getActivity().finish() + startActivity(intent) + } + + companion object { + + private val TAG = "MyPreferenceFragment" + private val alarmsList = ArrayList() + } +} diff --git a/app/src/main/java/com/nealgosalia/timetable/fragments/SaturdayFragment.java b/app/src/main/java/com/nealgosalia/timetable/fragments/SaturdayFragment.java deleted file mode 100644 index b9bb7e7..0000000 --- a/app/src/main/java/com/nealgosalia/timetable/fragments/SaturdayFragment.java +++ /dev/null @@ -1,85 +0,0 @@ -package com.nealgosalia.timetable.fragments; - -import android.app.AlertDialog; -import android.content.DialogInterface; -import android.os.Bundle; -import android.support.v4.app.Fragment; -import android.support.v7.widget.DefaultItemAnimator; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import com.nealgosalia.timetable.R; -import com.nealgosalia.timetable.adapters.LecturesAdapter; -import com.nealgosalia.timetable.database.FragmentDatabase; -import com.nealgosalia.timetable.database.FragmentDetails; -import com.nealgosalia.timetable.utils.DividerItemDecoration; -import com.nealgosalia.timetable.utils.Lecture; -import com.nealgosalia.timetable.utils.RecyclerItemClickListener; - -import java.util.ArrayList; -import java.util.List; - -public class SaturdayFragment extends Fragment { - - private FragmentDatabase db; - private List lecturesList = new ArrayList<>(); - private RecyclerView recyclerLectures; - private LecturesAdapter mLectureAdapter; - private TextView placeholderText; - private View view; - - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { - view = inflater.inflate(R.layout.fragment_saturday, container, false); - placeholderText = view.findViewById(R.id.saturdayPlaceholderText); - db = new FragmentDatabase(getActivity()); - lecturesList = new ArrayList<>(db.getLectureList(5)); - if (lecturesList.size() != 0) { - placeholderText.setVisibility(View.GONE); - } - recyclerLectures = view.findViewById(R.id.listSaturday); - mLectureAdapter = new LecturesAdapter(lecturesList); - RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getActivity()); - recyclerLectures.setLayoutManager(mLayoutManager); - recyclerLectures.setItemAnimator(new DefaultItemAnimator()); - recyclerLectures.addItemDecoration(new DividerItemDecoration(getContext(), LinearLayoutManager.VERTICAL)); - recyclerLectures.setAdapter(mLectureAdapter); - recyclerLectures.addOnItemTouchListener(new RecyclerItemClickListener(getContext(), new RecyclerItemClickListener.OnItemClickListener() { - @Override public void onItemClick(View view, int position) { - Lecture lecture = lecturesList.get(position); - showDeleteDialog(lecture, position); - } - })); - return view; - } - - public void showDeleteDialog(final Lecture lecture, final int position) { - AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(getContext()); - dialogBuilder.setTitle(getResources().getString(R.string.delete)); - dialogBuilder.setMessage(getResources().getString(R.string.delete_lecture)); - dialogBuilder.setPositiveButton(getResources().getString(R.string.yes), new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int whichButton) { - FragmentDetails fd = new FragmentDetails( - lecture.getDay(), - lecture.getSubjectName(), - Integer.parseInt(lecture.getStartTime().substring(0,2)), - Integer.parseInt(lecture.getStartTime().substring(3,5)), - Integer.parseInt(lecture.getEndTime().substring(0,2)), - Integer.parseInt(lecture.getEndTime().substring(3,5)), - lecture.getRoomNo() - ); - db.remove(fd); - lecturesList.remove(position); - mLectureAdapter.notifyDataSetChanged(); - } - }); - dialogBuilder.setNegativeButton(getResources().getString(R.string.no), null); - AlertDialog b = dialogBuilder.create(); - b.show(); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/nealgosalia/timetable/fragments/SaturdayFragment.kt b/app/src/main/java/com/nealgosalia/timetable/fragments/SaturdayFragment.kt new file mode 100644 index 0000000..e34feaa --- /dev/null +++ b/app/src/main/java/com/nealgosalia/timetable/fragments/SaturdayFragment.kt @@ -0,0 +1,85 @@ +package com.nealgosalia.timetable.fragments + +import android.app.AlertDialog +import android.content.DialogInterface +import android.os.Bundle +import android.support.v4.app.Fragment +import android.support.v7.widget.DefaultItemAnimator +import android.support.v7.widget.LinearLayoutManager +import android.support.v7.widget.RecyclerView +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView + +import com.nealgosalia.timetable.R +import com.nealgosalia.timetable.adapters.LecturesAdapter +import com.nealgosalia.timetable.database.FragmentDatabase +import com.nealgosalia.timetable.database.FragmentDetails +import com.nealgosalia.timetable.utils.DividerItemDecoration +import com.nealgosalia.timetable.utils.Lecture +import com.nealgosalia.timetable.utils.RecyclerItemClickListener + +import java.util.ArrayList + +class SaturdayFragment : Fragment() { + + private var db: FragmentDatabase? = null + private var lecturesList: List = ArrayList() + private var recyclerLectures: RecyclerView? = null + private var mLectureAdapter: LecturesAdapter? = null + private var placeholderText: TextView? = null + private var view: View? = null + + @Override + fun onCreateView(inflater: LayoutInflater, container: ViewGroup, + savedInstanceState: Bundle): View? { + view = inflater.inflate(R.layout.fragment_saturday, container, false) + placeholderText = view!!.findViewById(R.id.saturdayPlaceholderText) + db = FragmentDatabase(getActivity()) + lecturesList = ArrayList(db!!.getLectureList(5)) + if (lecturesList.size() !== 0) { + placeholderText!!.setVisibility(View.GONE) + } + recyclerLectures = view!!.findViewById(R.id.listSaturday) + mLectureAdapter = LecturesAdapter(lecturesList) + val mLayoutManager = LinearLayoutManager(getActivity()) + recyclerLectures!!.setLayoutManager(mLayoutManager) + recyclerLectures!!.setItemAnimator(DefaultItemAnimator()) + recyclerLectures!!.addItemDecoration(DividerItemDecoration(getContext(), LinearLayoutManager.VERTICAL)) + recyclerLectures!!.setAdapter(mLectureAdapter) + recyclerLectures!!.addOnItemTouchListener(RecyclerItemClickListener(getContext(), object : RecyclerItemClickListener.OnItemClickListener() { + @Override + fun onItemClick(view: View, position: Int) { + val lecture = lecturesList[position] + showDeleteDialog(lecture, position) + } + })) + return view + } + + fun showDeleteDialog(lecture: Lecture, position: Int) { + val dialogBuilder = AlertDialog.Builder(getContext()) + dialogBuilder.setTitle(getResources().getString(R.string.delete)) + dialogBuilder.setMessage(getResources().getString(R.string.delete_lecture)) + dialogBuilder.setPositiveButton(getResources().getString(R.string.yes), object : DialogInterface.OnClickListener() { + fun onClick(dialog: DialogInterface, whichButton: Int) { + val fd = FragmentDetails( + lecture.getDay(), + lecture.getSubjectName(), + Integer.parseInt(lecture.getStartTime().substring(0, 2)), + Integer.parseInt(lecture.getStartTime().substring(3, 5)), + Integer.parseInt(lecture.getEndTime().substring(0, 2)), + Integer.parseInt(lecture.getEndTime().substring(3, 5)), + lecture.getRoomNo() + ) + db!!.remove(fd) + lecturesList.remove(position) + mLectureAdapter!!.notifyDataSetChanged() + } + }) + dialogBuilder.setNegativeButton(getResources().getString(R.string.no), null) + val b = dialogBuilder.create() + b.show() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/nealgosalia/timetable/fragments/SubjectsFragment.java b/app/src/main/java/com/nealgosalia/timetable/fragments/SubjectsFragment.java deleted file mode 100644 index dde576c..0000000 --- a/app/src/main/java/com/nealgosalia/timetable/fragments/SubjectsFragment.java +++ /dev/null @@ -1,277 +0,0 @@ -package com.nealgosalia.timetable.fragments; - -import android.content.DialogInterface; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.Canvas; -import android.graphics.Color; -import android.graphics.Paint; -import android.graphics.RectF; -import android.os.Bundle; -import android.support.design.widget.FloatingActionButton; -import android.support.v4.app.Fragment; -import android.support.v7.app.AlertDialog; -import android.support.v7.widget.DefaultItemAnimator; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; -import android.support.v7.widget.helper.ItemTouchHelper; -import android.text.Editable; -import android.text.TextWatcher; -import android.util.Log; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.ArrayAdapter; -import android.widget.AutoCompleteTextView; -import android.widget.TextView; - -import com.nealgosalia.timetable.R; -import com.nealgosalia.timetable.adapters.SubjectsAdapter; -import com.nealgosalia.timetable.database.SubjectDatabase; -import com.nealgosalia.timetable.database.SubjectDetails; -import com.nealgosalia.timetable.utils.DividerItemDecoration; -import com.nealgosalia.timetable.utils.Subject; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -public class SubjectsFragment extends Fragment { - - private List subjectsList = new ArrayList<>(); - private RecyclerView listSubjects; - private SubjectsAdapter mSubjectsAdapter; - private SubjectDatabase subjectDatabase; - private TextView placeholderText; - private View view; - private View dialogView; - private Paint p = new Paint(); - private AlertDialog.Builder alertDialog; - private AutoCompleteTextView editSubject; - private AutoCompleteTextView newSubjectName; - - String[] sub; - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { - view = inflater.inflate(R.layout.activity_subjects, container, false); - listSubjects = view.findViewById(R.id.listSubjects); - placeholderText = view.findViewById(R.id.subjectsPlaceholderText); - subjectDatabase = new SubjectDatabase(getActivity()); - subjectsList.clear(); - for (SubjectDetails subjectDetails : subjectDatabase.getSubjectDetail()) { - Subject subject = new Subject(); - subject.setSubjectName(subjectDetails.getSubject()); - subjectsList.add(subject); - } - Log.d("SubjectsFragment", String.valueOf(subjectsList.size())); - if (subjectsList.size() != 0) { - placeholderText.setVisibility(View.GONE); - } - mSubjectsAdapter = new SubjectsAdapter(subjectsList); - RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getActivity()); - listSubjects.setLayoutManager(mLayoutManager); - listSubjects.setItemAnimator(new DefaultItemAnimator()); - listSubjects.addItemDecoration(new DividerItemDecoration(getActivity(), LinearLayoutManager.VERTICAL)); - listSubjects.setAdapter(mSubjectsAdapter); - FloatingActionButton fab = view.findViewById(R.id.fab); - fab.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - showSubjectDialog(); - } - }); - initSwipe(); - return view; - } - - public void showSubjectDialog() { - AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(getActivity()); - LayoutInflater inflater = getActivity().getLayoutInflater(); - final View dialogView = inflater.inflate(R.layout.dialog_add_subject, null); - dialogBuilder.setView(dialogView); - newSubjectName = dialogView.findViewById(R.id.newSubjectName); - sub = getResources().getStringArray(R.array.subjectNames); - ArrayAdapter adapter = new ArrayAdapter(getActivity(),android.R.layout.simple_list_item_1,sub); - newSubjectName.setThreshold(2); - newSubjectName.setAdapter(adapter); - dialogBuilder.setTitle(getResources().getString(R.string.subject)); - dialogBuilder.setMessage(getResources().getString(R.string.enter_subject_name)); - dialogBuilder.setPositiveButton(getResources().getString(R.string.add), new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int whichButton) { - Subject subject = new Subject(); - String tempSubject = newSubjectName.getText().toString().trim(); - subject.setSubjectName(tempSubject); - subjectDatabase.addSubject(new SubjectDetails(tempSubject, 0, 0)); - subjectsList.add(subject); - Collections.sort(subjectsList, Subject.Comparators.NAME); - mSubjectsAdapter.notifyDataSetChanged(); - placeholderText.setVisibility(View.GONE); - newSubjectName.setText(""); - } - }); - dialogBuilder.setNegativeButton(getResources().getString(R.string.cancel), null); - final AlertDialog dialog = dialogBuilder.create(); - dialog.show(); - dialog.getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(false); - newSubjectName.addTextChangedListener(new TextWatcher() { - @Override - public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { - - } - - @Override - public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) { - - } - - @Override - public void afterTextChanged(Editable editable) { - if(editable.length()>=1){ - dialog.getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(true); - } else { - dialog.getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(false); - } - } - }); - } - - private void initSwipe(){ - ItemTouchHelper.SimpleCallback simpleItemTouchCallback = new ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT) { - - @Override - public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) { - return false; - } - - @Override - public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) { - int position = viewHolder.getAdapterPosition(); - - if (direction == ItemTouchHelper.LEFT){ - deleteSwipe(position); - } else { - initDialog(position); - } - } - - @Override - public void onChildDraw(Canvas c, RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState, boolean isCurrentlyActive) { - - Bitmap icon; - if(actionState == ItemTouchHelper.ACTION_STATE_SWIPE){ - - View itemView = viewHolder.itemView; - float height = (float) itemView.getBottom() - (float) itemView.getTop(); - float width = height / 3; - - if(dX > 0){ - p.setColor(Color.parseColor("#FF5722")); - RectF background = new RectF((float) itemView.getLeft(), (float) itemView.getTop(), dX,(float) itemView.getBottom()); - c.drawRect(background,p); - icon = BitmapFactory.decodeResource(getResources(), R.drawable.ic_edit_white); - RectF icon_dest = new RectF((float) itemView.getLeft() + width ,(float) itemView.getTop() + width,(float) itemView.getLeft()+ 2*width,(float)itemView.getBottom() - width); - c.drawBitmap(icon,null,icon_dest,p); - } else if(dX < 0) { - p.setColor(Color.parseColor("#009688")); - RectF background = new RectF((float) itemView.getRight() + dX, (float) itemView.getTop(),(float) itemView.getRight(), (float) itemView.getBottom()); - c.drawRect(background,p); - icon = BitmapFactory.decodeResource(getResources(), R.drawable.ic_delete_white); - RectF icon_dest = new RectF((float) itemView.getRight() - 2*width ,(float) itemView.getTop() + width,(float) itemView.getRight() - width,(float)itemView.getBottom() - width); - c.drawBitmap(icon,null,icon_dest,p); - } - } - super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive); - } - }; - ItemTouchHelper itemTouchHelper = new ItemTouchHelper(simpleItemTouchCallback); - itemTouchHelper.attachToRecyclerView(listSubjects); - } - private void initDialog(final int position){ - alertDialog = new AlertDialog.Builder(getActivity()); - dialogView = getActivity().getLayoutInflater().inflate(R.layout.dialog_edit_subject,null); - editSubject = dialogView.findViewById(R.id.edit_subject); - sub = getResources().getStringArray(R.array.subjectNames); - ArrayAdapter adapte = new ArrayAdapter(getActivity(),android.R.layout.simple_list_item_1,sub); - if(editSubject !=null) { - editSubject.setThreshold(2); - editSubject.setAdapter(adapte); - } - alertDialog.setView(dialogView); - alertDialog.setTitle(getResources().getString(R.string.edit_subject)); - alertDialog.setPositiveButton("Save", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - Subject subject = subjectsList.get(position); - SubjectDetails sd = new SubjectDetails( - editSubject.getText().toString(), - subject.getAttendedLectures(), - subject.getTotalLectures() - ); - subjectDatabase.updateSubject(sd); - subjectsList.set(position, subject); - Collections.sort(subjectsList, Subject.Comparators.NAME); - mSubjectsAdapter.notifyDataSetChanged(); - dialog.dismiss(); - } - }); - alertDialog.setNegativeButton(getResources().getString(R.string.cancel), new DialogInterface.OnClickListener(){ - @Override - public void onClick(DialogInterface dialog, int which) { - mSubjectsAdapter.notifyDataSetChanged(); - dialog.dismiss(); - } - }); - final AlertDialog dialog = alertDialog.create(); - dialog.show(); - dialog.getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(false); - editSubject.addTextChangedListener(new TextWatcher() { - @Override - public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { - - } - - @Override - public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) { - - } - - @Override - public void afterTextChanged(Editable editable) { - if (editable.length() >= 1) { - dialog.getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(true); - mSubjectsAdapter.notifyDataSetChanged(); - } else { - dialog.getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(false); - mSubjectsAdapter.notifyDataSetChanged(); - } - } - }); - mSubjectsAdapter.notifyDataSetChanged(); - } - - public void deleteSwipe(final int position) { - android.app.AlertDialog.Builder alertDialog = new android.app.AlertDialog.Builder(getActivity()); - alertDialog.setTitle(getResources().getString(R.string.warning)); - alertDialog.setMessage(getResources().getString(R.string.subject_question)); - alertDialog.setPositiveButton(getResources().getString(R.string.yes), new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - Subject subject = subjectsList.get(position); - SubjectDetails sd = new SubjectDetails(); - sd.setSubject(subject.getSubjectName()); - subjectDatabase.removeSubject(sd); - subjectsList.remove(position); - mSubjectsAdapter.notifyDataSetChanged(); - } - }); - alertDialog.setNegativeButton(getResources().getString(R.string.no), new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - mSubjectsAdapter.notifyDataSetChanged(); - } - }); - alertDialog.show(); - mSubjectsAdapter.notifyDataSetChanged(); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/nealgosalia/timetable/fragments/SubjectsFragment.kt b/app/src/main/java/com/nealgosalia/timetable/fragments/SubjectsFragment.kt new file mode 100644 index 0000000..8d2b671 --- /dev/null +++ b/app/src/main/java/com/nealgosalia/timetable/fragments/SubjectsFragment.kt @@ -0,0 +1,277 @@ +package com.nealgosalia.timetable.fragments + +import android.content.DialogInterface +import android.graphics.Bitmap +import android.graphics.BitmapFactory +import android.graphics.Canvas +import android.graphics.Color +import android.graphics.Paint +import android.graphics.RectF +import android.os.Bundle +import android.support.design.widget.FloatingActionButton +import android.support.v4.app.Fragment +import android.support.v7.app.AlertDialog +import android.support.v7.widget.DefaultItemAnimator +import android.support.v7.widget.LinearLayoutManager +import android.support.v7.widget.RecyclerView +import android.support.v7.widget.helper.ItemTouchHelper +import android.text.Editable +import android.text.TextWatcher +import android.util.Log +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ArrayAdapter +import android.widget.AutoCompleteTextView +import android.widget.TextView + +import com.nealgosalia.timetable.R +import com.nealgosalia.timetable.adapters.SubjectsAdapter +import com.nealgosalia.timetable.database.SubjectDatabase +import com.nealgosalia.timetable.database.SubjectDetails +import com.nealgosalia.timetable.utils.DividerItemDecoration +import com.nealgosalia.timetable.utils.Subject + +import java.util.ArrayList +import java.util.Collections + +class SubjectsFragment : Fragment() { + + private val subjectsList = ArrayList() + private var listSubjects: RecyclerView? = null + private var mSubjectsAdapter: SubjectsAdapter? = null + private var subjectDatabase: SubjectDatabase? = null + private var placeholderText: TextView? = null + private var view: View? = null + private var dialogView: View? = null + private val p = Paint() + private var alertDialog: AlertDialog.Builder? = null + private var editSubject: AutoCompleteTextView? = null + private var newSubjectName: AutoCompleteTextView? = null + + internal var sub: Array + @Override + fun onCreateView(inflater: LayoutInflater, container: ViewGroup, + savedInstanceState: Bundle): View? { + view = inflater.inflate(R.layout.activity_subjects, container, false) + listSubjects = view!!.findViewById(R.id.listSubjects) + placeholderText = view!!.findViewById(R.id.subjectsPlaceholderText) + subjectDatabase = SubjectDatabase(getActivity()) + subjectsList.clear() + for (subjectDetails in subjectDatabase!!.getSubjectDetail()) { + val subject = Subject() + subject.setSubjectName(subjectDetails.getSubject()) + subjectsList.add(subject) + } + Log.d("SubjectsFragment", String.valueOf(subjectsList.size())) + if (subjectsList.size() !== 0) { + placeholderText!!.setVisibility(View.GONE) + } + mSubjectsAdapter = SubjectsAdapter(subjectsList) + val mLayoutManager = LinearLayoutManager(getActivity()) + listSubjects!!.setLayoutManager(mLayoutManager) + listSubjects!!.setItemAnimator(DefaultItemAnimator()) + listSubjects!!.addItemDecoration(DividerItemDecoration(getActivity(), LinearLayoutManager.VERTICAL)) + listSubjects!!.setAdapter(mSubjectsAdapter) + val fab = view!!.findViewById(R.id.fab) + fab.setOnClickListener(object : View.OnClickListener() { + @Override + fun onClick(view: View) { + showSubjectDialog() + } + }) + initSwipe() + return view + } + + fun showSubjectDialog() { + val dialogBuilder = AlertDialog.Builder(getActivity()) + val inflater = getActivity().getLayoutInflater() + val dialogView = inflater.inflate(R.layout.dialog_add_subject, null) + dialogBuilder.setView(dialogView) + newSubjectName = dialogView.findViewById(R.id.newSubjectName) + sub = getResources().getStringArray(R.array.subjectNames) + val adapter = ArrayAdapter(getActivity(), android.R.layout.simple_list_item_1, sub) + newSubjectName!!.setThreshold(2) + newSubjectName!!.setAdapter(adapter) + dialogBuilder.setTitle(getResources().getString(R.string.subject)) + dialogBuilder.setMessage(getResources().getString(R.string.enter_subject_name)) + dialogBuilder.setPositiveButton(getResources().getString(R.string.add), object : DialogInterface.OnClickListener() { + fun onClick(dialog: DialogInterface, whichButton: Int) { + val subject = Subject() + val tempSubject = newSubjectName!!.getText().toString().trim() + subject.setSubjectName(tempSubject) + subjectDatabase!!.addSubject(SubjectDetails(tempSubject, 0, 0)) + subjectsList.add(subject) + Collections.sort(subjectsList, Subject.Comparators.NAME) + mSubjectsAdapter!!.notifyDataSetChanged() + placeholderText!!.setVisibility(View.GONE) + newSubjectName!!.setText("") + } + }) + dialogBuilder.setNegativeButton(getResources().getString(R.string.cancel), null) + val dialog = dialogBuilder.create() + dialog.show() + dialog.getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(false) + newSubjectName!!.addTextChangedListener(object : TextWatcher() { + @Override + fun beforeTextChanged(charSequence: CharSequence, i: Int, i1: Int, i2: Int) { + + } + + @Override + fun onTextChanged(charSequence: CharSequence, i: Int, i1: Int, i2: Int) { + + } + + @Override + fun afterTextChanged(editable: Editable) { + if (editable.length() >= 1) { + dialog.getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(true) + } else { + dialog.getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(false) + } + } + }) + } + + private fun initSwipe() { + val simpleItemTouchCallback = object : ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.LEFT or ItemTouchHelper.RIGHT) { + + @Override + fun onMove(recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder, target: RecyclerView.ViewHolder): Boolean { + return false + } + + @Override + fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) { + val position = viewHolder.getAdapterPosition() + + if (direction == ItemTouchHelper.LEFT) { + deleteSwipe(position) + } else { + initDialog(position) + } + } + + @Override + fun onChildDraw(c: Canvas, recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder, dX: Float, dY: Float, actionState: Int, isCurrentlyActive: Boolean) { + + val icon: Bitmap + if (actionState == ItemTouchHelper.ACTION_STATE_SWIPE) { + + val itemView = viewHolder.itemView + val height = itemView.getBottom() as Float - itemView.getTop() as Float + val width = height / 3 + + if (dX > 0) { + p.setColor(Color.parseColor("#FF5722")) + val background = RectF(itemView.getLeft() as Float, itemView.getTop() as Float, dX, itemView.getBottom() as Float) + c.drawRect(background, p) + icon = BitmapFactory.decodeResource(getResources(), R.drawable.ic_edit_white) + val icon_dest = RectF(itemView.getLeft() as Float + width, itemView.getTop() as Float + width, itemView.getLeft() as Float + 2 * width, itemView.getBottom() as Float - width) + c.drawBitmap(icon, null, icon_dest, p) + } else if (dX < 0) { + p.setColor(Color.parseColor("#009688")) + val background = RectF(itemView.getRight() as Float + dX, itemView.getTop() as Float, itemView.getRight() as Float, itemView.getBottom() as Float) + c.drawRect(background, p) + icon = BitmapFactory.decodeResource(getResources(), R.drawable.ic_delete_white) + val icon_dest = RectF(itemView.getRight() as Float - 2 * width, itemView.getTop() as Float + width, itemView.getRight() as Float - width, itemView.getBottom() as Float - width) + c.drawBitmap(icon, null, icon_dest, p) + } + } + super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive) + } + } + val itemTouchHelper = ItemTouchHelper(simpleItemTouchCallback) + itemTouchHelper.attachToRecyclerView(listSubjects) + } + + private fun initDialog(position: Int) { + alertDialog = AlertDialog.Builder(getActivity()) + dialogView = getActivity().getLayoutInflater().inflate(R.layout.dialog_edit_subject, null) + editSubject = dialogView!!.findViewById(R.id.edit_subject) + sub = getResources().getStringArray(R.array.subjectNames) + val adapte = ArrayAdapter(getActivity(), android.R.layout.simple_list_item_1, sub) + if (editSubject != null) { + editSubject!!.setThreshold(2) + editSubject!!.setAdapter(adapte) + } + alertDialog!!.setView(dialogView) + alertDialog!!.setTitle(getResources().getString(R.string.edit_subject)) + alertDialog!!.setPositiveButton("Save", object : DialogInterface.OnClickListener() { + @Override + fun onClick(dialog: DialogInterface, which: Int) { + val subject = subjectsList.get(position) + val sd = SubjectDetails( + editSubject!!.getText().toString(), + subject.getAttendedLectures(), + subject.getTotalLectures() + ) + subjectDatabase!!.updateSubject(sd) + subjectsList.set(position, subject) + Collections.sort(subjectsList, Subject.Comparators.NAME) + mSubjectsAdapter!!.notifyDataSetChanged() + dialog.dismiss() + } + }) + alertDialog!!.setNegativeButton(getResources().getString(R.string.cancel), object : DialogInterface.OnClickListener() { + @Override + fun onClick(dialog: DialogInterface, which: Int) { + mSubjectsAdapter!!.notifyDataSetChanged() + dialog.dismiss() + } + }) + val dialog = alertDialog!!.create() + dialog.show() + dialog.getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(false) + editSubject!!.addTextChangedListener(object : TextWatcher() { + @Override + fun beforeTextChanged(charSequence: CharSequence, i: Int, i1: Int, i2: Int) { + + } + + @Override + fun onTextChanged(charSequence: CharSequence, i: Int, i1: Int, i2: Int) { + + } + + @Override + fun afterTextChanged(editable: Editable) { + if (editable.length() >= 1) { + dialog.getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(true) + mSubjectsAdapter!!.notifyDataSetChanged() + } else { + dialog.getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(false) + mSubjectsAdapter!!.notifyDataSetChanged() + } + } + }) + mSubjectsAdapter!!.notifyDataSetChanged() + } + + fun deleteSwipe(position: Int) { + val alertDialog = android.app.AlertDialog.Builder(getActivity()) + alertDialog.setTitle(getResources().getString(R.string.warning)) + alertDialog.setMessage(getResources().getString(R.string.subject_question)) + alertDialog.setPositiveButton(getResources().getString(R.string.yes), object : DialogInterface.OnClickListener() { + @Override + fun onClick(dialog: DialogInterface, which: Int) { + val subject = subjectsList.get(position) + val sd = SubjectDetails() + sd.setSubject(subject.getSubjectName()) + subjectDatabase!!.removeSubject(sd) + subjectsList.remove(position) + mSubjectsAdapter!!.notifyDataSetChanged() + } + }) + alertDialog.setNegativeButton(getResources().getString(R.string.no), object : DialogInterface.OnClickListener() { + @Override + fun onClick(dialog: DialogInterface, which: Int) { + mSubjectsAdapter!!.notifyDataSetChanged() + } + }) + alertDialog.show() + mSubjectsAdapter!!.notifyDataSetChanged() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/nealgosalia/timetable/fragments/SundayFragment.java b/app/src/main/java/com/nealgosalia/timetable/fragments/SundayFragment.java deleted file mode 100644 index dd82460..0000000 --- a/app/src/main/java/com/nealgosalia/timetable/fragments/SundayFragment.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.nealgosalia.timetable.fragments; - -import android.app.AlertDialog; -import android.content.DialogInterface; -import android.os.Bundle; -import android.support.v4.app.Fragment; -import android.support.v7.widget.DefaultItemAnimator; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import com.nealgosalia.timetable.R; -import com.nealgosalia.timetable.adapters.LecturesAdapter; -import com.nealgosalia.timetable.database.FragmentDatabase; -import com.nealgosalia.timetable.database.FragmentDetails; -import com.nealgosalia.timetable.utils.DividerItemDecoration; -import com.nealgosalia.timetable.utils.Lecture; -import com.nealgosalia.timetable.utils.RecyclerItemClickListener; - -import java.util.ArrayList; -import java.util.List; - -public class SundayFragment extends Fragment { - - private FragmentDatabase db; - private List lecturesList = new ArrayList<>(); - private RecyclerView recyclerLectures; - private LecturesAdapter mLectureAdapter; - private TextView placeholderText; - private View view; - - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { - view = inflater.inflate(R.layout.fragment_sunday, container, false); - placeholderText = view.findViewById(R.id.sundayPlaceholderText); - db = new FragmentDatabase(getActivity()); - lecturesList = new ArrayList<>(db.getLectureList(6)); - if (lecturesList.size() != 0) { - placeholderText.setVisibility(View.GONE); - } - recyclerLectures = view.findViewById(R.id.listSunday); - mLectureAdapter = new LecturesAdapter(lecturesList); - RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getActivity()); - recyclerLectures.setLayoutManager(mLayoutManager); - recyclerLectures.setItemAnimator(new DefaultItemAnimator()); - recyclerLectures.addItemDecoration(new DividerItemDecoration(getContext(), LinearLayoutManager.VERTICAL)); - recyclerLectures.setAdapter(mLectureAdapter); - recyclerLectures.addOnItemTouchListener(new RecyclerItemClickListener(getContext(), new RecyclerItemClickListener.OnItemClickListener() { - @Override public void onItemClick(View view, int position) { - Lecture lecture = lecturesList.get(position); - showDeleteDialog(lecture, position); - } - })); - return view; - } - - public void showDeleteDialog(final Lecture lecture, final int position) { - AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(getContext()); - dialogBuilder.setTitle(getResources().getString(R.string.delete)); - dialogBuilder.setMessage(getResources().getString(R.string.delete_lecture)); - dialogBuilder.setPositiveButton(getResources().getString(R.string.yes), new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int whichButton) { - FragmentDetails fd = new FragmentDetails( - lecture.getDay(), - lecture.getSubjectName(), - Integer.parseInt(lecture.getStartTime().substring(0,2)), - Integer.parseInt(lecture.getStartTime().substring(3,5)), - Integer.parseInt(lecture.getEndTime().substring(0,2)), - Integer.parseInt(lecture.getEndTime().substring(3,5)), - lecture.getRoomNo() - - - ); - db.remove(fd); - lecturesList.remove(position); - mLectureAdapter.notifyDataSetChanged(); - } - }); - dialogBuilder.setNegativeButton(getResources().getString(R.string.no), null); - AlertDialog b = dialogBuilder.create(); - b.show(); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/nealgosalia/timetable/fragments/SundayFragment.kt b/app/src/main/java/com/nealgosalia/timetable/fragments/SundayFragment.kt new file mode 100644 index 0000000..7ac4e1f --- /dev/null +++ b/app/src/main/java/com/nealgosalia/timetable/fragments/SundayFragment.kt @@ -0,0 +1,87 @@ +package com.nealgosalia.timetable.fragments + +import android.app.AlertDialog +import android.content.DialogInterface +import android.os.Bundle +import android.support.v4.app.Fragment +import android.support.v7.widget.DefaultItemAnimator +import android.support.v7.widget.LinearLayoutManager +import android.support.v7.widget.RecyclerView +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView + +import com.nealgosalia.timetable.R +import com.nealgosalia.timetable.adapters.LecturesAdapter +import com.nealgosalia.timetable.database.FragmentDatabase +import com.nealgosalia.timetable.database.FragmentDetails +import com.nealgosalia.timetable.utils.DividerItemDecoration +import com.nealgosalia.timetable.utils.Lecture +import com.nealgosalia.timetable.utils.RecyclerItemClickListener + +import java.util.ArrayList + +class SundayFragment : Fragment() { + + private var db: FragmentDatabase? = null + private var lecturesList: List = ArrayList() + private var recyclerLectures: RecyclerView? = null + private var mLectureAdapter: LecturesAdapter? = null + private var placeholderText: TextView? = null + private var view: View? = null + + @Override + fun onCreateView(inflater: LayoutInflater, container: ViewGroup, + savedInstanceState: Bundle): View? { + view = inflater.inflate(R.layout.fragment_sunday, container, false) + placeholderText = view!!.findViewById(R.id.sundayPlaceholderText) + db = FragmentDatabase(getActivity()) + lecturesList = ArrayList(db!!.getLectureList(6)) + if (lecturesList.size() !== 0) { + placeholderText!!.setVisibility(View.GONE) + } + recyclerLectures = view!!.findViewById(R.id.listSunday) + mLectureAdapter = LecturesAdapter(lecturesList) + val mLayoutManager = LinearLayoutManager(getActivity()) + recyclerLectures!!.setLayoutManager(mLayoutManager) + recyclerLectures!!.setItemAnimator(DefaultItemAnimator()) + recyclerLectures!!.addItemDecoration(DividerItemDecoration(getContext(), LinearLayoutManager.VERTICAL)) + recyclerLectures!!.setAdapter(mLectureAdapter) + recyclerLectures!!.addOnItemTouchListener(RecyclerItemClickListener(getContext(), object : RecyclerItemClickListener.OnItemClickListener() { + @Override + fun onItemClick(view: View, position: Int) { + val lecture = lecturesList[position] + showDeleteDialog(lecture, position) + } + })) + return view + } + + fun showDeleteDialog(lecture: Lecture, position: Int) { + val dialogBuilder = AlertDialog.Builder(getContext()) + dialogBuilder.setTitle(getResources().getString(R.string.delete)) + dialogBuilder.setMessage(getResources().getString(R.string.delete_lecture)) + dialogBuilder.setPositiveButton(getResources().getString(R.string.yes), object : DialogInterface.OnClickListener() { + fun onClick(dialog: DialogInterface, whichButton: Int) { + val fd = FragmentDetails( + lecture.getDay(), + lecture.getSubjectName(), + Integer.parseInt(lecture.getStartTime().substring(0, 2)), + Integer.parseInt(lecture.getStartTime().substring(3, 5)), + Integer.parseInt(lecture.getEndTime().substring(0, 2)), + Integer.parseInt(lecture.getEndTime().substring(3, 5)), + lecture.getRoomNo() + + + ) + db!!.remove(fd) + lecturesList.remove(position) + mLectureAdapter!!.notifyDataSetChanged() + } + }) + dialogBuilder.setNegativeButton(getResources().getString(R.string.no), null) + val b = dialogBuilder.create() + b.show() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/nealgosalia/timetable/fragments/ThursdayFragment.java b/app/src/main/java/com/nealgosalia/timetable/fragments/ThursdayFragment.java deleted file mode 100644 index ca97e13..0000000 --- a/app/src/main/java/com/nealgosalia/timetable/fragments/ThursdayFragment.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.nealgosalia.timetable.fragments; - -import android.app.AlertDialog; -import android.content.DialogInterface; -import android.os.Bundle; -import android.support.v4.app.Fragment; -import android.support.v7.widget.DefaultItemAnimator; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import com.nealgosalia.timetable.R; -import com.nealgosalia.timetable.adapters.LecturesAdapter; -import com.nealgosalia.timetable.database.FragmentDatabase; -import com.nealgosalia.timetable.database.FragmentDetails; -import com.nealgosalia.timetable.utils.DividerItemDecoration; -import com.nealgosalia.timetable.utils.Lecture; -import com.nealgosalia.timetable.utils.RecyclerItemClickListener; - -import java.util.ArrayList; -import java.util.List; - -public class ThursdayFragment extends Fragment { - - private FragmentDatabase db; - private List lecturesList = new ArrayList<>(); - private RecyclerView recyclerLectures; - private LecturesAdapter mLectureAdapter; - private TextView placeholderText; - private View view; - - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { - view = inflater.inflate(R.layout.fragment_thursday, container, false); - placeholderText = view.findViewById(R.id.thursdayPlaceholderText); - db = new FragmentDatabase(getActivity()); - lecturesList = new ArrayList<>(db.getLectureList(3)); - if (lecturesList.size() != 0) { - placeholderText.setVisibility(View.GONE); - } - recyclerLectures = view.findViewById(R.id.listThursday); - mLectureAdapter = new LecturesAdapter(lecturesList); - RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getActivity()); - recyclerLectures.setLayoutManager(mLayoutManager); - recyclerLectures.setItemAnimator(new DefaultItemAnimator()); - recyclerLectures.addItemDecoration(new DividerItemDecoration(getContext(), LinearLayoutManager.VERTICAL)); - recyclerLectures.setAdapter(mLectureAdapter); - recyclerLectures.addOnItemTouchListener(new RecyclerItemClickListener(getContext(), new RecyclerItemClickListener.OnItemClickListener() { - @Override public void onItemClick(View view, int position) { - Lecture lecture = lecturesList.get(position); - showDeleteDialog(lecture, position); - } - })); - return view; - } - - public void showDeleteDialog(final Lecture lecture, final int position) { - AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(getContext()); - dialogBuilder.setTitle(getResources().getString(R.string.delete)); - dialogBuilder.setMessage(getResources().getString(R.string.delete_lecture)); - dialogBuilder.setPositiveButton(getResources().getString(R.string.yes), new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int whichButton) { - FragmentDetails fd = new FragmentDetails( - lecture.getDay(), - lecture.getSubjectName(), - Integer.parseInt(lecture.getStartTime().substring(0,2)), - Integer.parseInt(lecture.getStartTime().substring(3,5)), - Integer.parseInt(lecture.getEndTime().substring(0,2)), - Integer.parseInt(lecture.getEndTime().substring(3,5)), - lecture.getRoomNo() - - - ); - db.remove(fd); - lecturesList.remove(position); - mLectureAdapter.notifyDataSetChanged(); - } - }); - dialogBuilder.setNegativeButton(getResources().getString(R.string.no), null); - AlertDialog b = dialogBuilder.create(); - b.show(); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/nealgosalia/timetable/fragments/ThursdayFragment.kt b/app/src/main/java/com/nealgosalia/timetable/fragments/ThursdayFragment.kt new file mode 100644 index 0000000..037ff66 --- /dev/null +++ b/app/src/main/java/com/nealgosalia/timetable/fragments/ThursdayFragment.kt @@ -0,0 +1,87 @@ +package com.nealgosalia.timetable.fragments + +import android.app.AlertDialog +import android.content.DialogInterface +import android.os.Bundle +import android.support.v4.app.Fragment +import android.support.v7.widget.DefaultItemAnimator +import android.support.v7.widget.LinearLayoutManager +import android.support.v7.widget.RecyclerView +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView + +import com.nealgosalia.timetable.R +import com.nealgosalia.timetable.adapters.LecturesAdapter +import com.nealgosalia.timetable.database.FragmentDatabase +import com.nealgosalia.timetable.database.FragmentDetails +import com.nealgosalia.timetable.utils.DividerItemDecoration +import com.nealgosalia.timetable.utils.Lecture +import com.nealgosalia.timetable.utils.RecyclerItemClickListener + +import java.util.ArrayList + +class ThursdayFragment : Fragment() { + + private var db: FragmentDatabase? = null + private var lecturesList: List = ArrayList() + private var recyclerLectures: RecyclerView? = null + private var mLectureAdapter: LecturesAdapter? = null + private var placeholderText: TextView? = null + private var view: View? = null + + @Override + fun onCreateView(inflater: LayoutInflater, container: ViewGroup, + savedInstanceState: Bundle): View? { + view = inflater.inflate(R.layout.fragment_thursday, container, false) + placeholderText = view!!.findViewById(R.id.thursdayPlaceholderText) + db = FragmentDatabase(getActivity()) + lecturesList = ArrayList(db!!.getLectureList(3)) + if (lecturesList.size() !== 0) { + placeholderText!!.setVisibility(View.GONE) + } + recyclerLectures = view!!.findViewById(R.id.listThursday) + mLectureAdapter = LecturesAdapter(lecturesList) + val mLayoutManager = LinearLayoutManager(getActivity()) + recyclerLectures!!.setLayoutManager(mLayoutManager) + recyclerLectures!!.setItemAnimator(DefaultItemAnimator()) + recyclerLectures!!.addItemDecoration(DividerItemDecoration(getContext(), LinearLayoutManager.VERTICAL)) + recyclerLectures!!.setAdapter(mLectureAdapter) + recyclerLectures!!.addOnItemTouchListener(RecyclerItemClickListener(getContext(), object : RecyclerItemClickListener.OnItemClickListener() { + @Override + fun onItemClick(view: View, position: Int) { + val lecture = lecturesList[position] + showDeleteDialog(lecture, position) + } + })) + return view + } + + fun showDeleteDialog(lecture: Lecture, position: Int) { + val dialogBuilder = AlertDialog.Builder(getContext()) + dialogBuilder.setTitle(getResources().getString(R.string.delete)) + dialogBuilder.setMessage(getResources().getString(R.string.delete_lecture)) + dialogBuilder.setPositiveButton(getResources().getString(R.string.yes), object : DialogInterface.OnClickListener() { + fun onClick(dialog: DialogInterface, whichButton: Int) { + val fd = FragmentDetails( + lecture.getDay(), + lecture.getSubjectName(), + Integer.parseInt(lecture.getStartTime().substring(0, 2)), + Integer.parseInt(lecture.getStartTime().substring(3, 5)), + Integer.parseInt(lecture.getEndTime().substring(0, 2)), + Integer.parseInt(lecture.getEndTime().substring(3, 5)), + lecture.getRoomNo() + + + ) + db!!.remove(fd) + lecturesList.remove(position) + mLectureAdapter!!.notifyDataSetChanged() + } + }) + dialogBuilder.setNegativeButton(getResources().getString(R.string.no), null) + val b = dialogBuilder.create() + b.show() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/nealgosalia/timetable/fragments/TimetableFragment.java b/app/src/main/java/com/nealgosalia/timetable/fragments/TimetableFragment.java deleted file mode 100644 index b8f2b79..0000000 --- a/app/src/main/java/com/nealgosalia/timetable/fragments/TimetableFragment.java +++ /dev/null @@ -1,253 +0,0 @@ -package com.nealgosalia.timetable.fragments; - -import android.annotation.SuppressLint; -import android.app.AlarmManager; -import android.app.PendingIntent; -import android.content.Intent; -import android.content.SharedPreferences; -import android.graphics.Color; -import android.os.Build; -import android.os.Bundle; -import android.preference.PreferenceManager; -import android.support.annotation.NonNull; -import android.support.design.widget.FloatingActionButton; -import android.support.design.widget.TabLayout; -import android.support.v4.app.Fragment; -import android.support.v4.view.ViewPager; -import android.support.v7.app.AlertDialog; -import android.util.Log; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.ArrayAdapter; -import android.widget.Button; -import android.widget.EditText; -import android.widget.Spinner; -import android.widget.TextView; -import android.widget.TimePicker; -import android.widget.Toast; - -import com.nealgosalia.timetable.R; -import com.nealgosalia.timetable.adapters.SimpleFragmentPagerAdapter; -import com.nealgosalia.timetable.database.FragmentDatabase; -import com.nealgosalia.timetable.database.FragmentDetails; -import com.nealgosalia.timetable.database.SubjectDatabase; -import com.nealgosalia.timetable.database.SubjectDetails; -import com.nealgosalia.timetable.receivers.MyReceiver; -import com.nealgosalia.timetable.utils.Alarms; - -import java.util.ArrayList; -import java.util.Calendar; -import java.util.List; -import java.util.Locale; - -import static android.content.Context.ALARM_SERVICE; - - -public class TimetableFragment extends Fragment { - - private static final int MINUTE = 60000; - private static final String TAG = "TimetableFragment"; - private Button btnNext; - private List subjectsList = new ArrayList<>(); - private Spinner spinnerSubjects; - private TabLayout tabLayout; - private TextView textDialog; - private TimePicker startTime; - private TimePicker endTime; - private ViewPager viewPager; - private EditText roomN; - private int count; - private FragmentDatabase fragmentDatabase; - private SubjectDatabase subjectDatabase; - - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { - View view = inflater.inflate(R.layout.activity_timetable, container, false); - fragmentDatabase = new FragmentDatabase(getActivity()); - subjectDatabase = new SubjectDatabase(getActivity()); - viewPager = view.findViewById(R.id.viewpager); - viewPager.setAdapter(new SimpleFragmentPagerAdapter(getChildFragmentManager(), getActivity())); - tabLayout = view.findViewById(R.id.sliding_tabs); - tabLayout.setupWithViewPager(viewPager); - Calendar c = Calendar.getInstance(); - int dayOfWeek = c.get(Calendar.DAY_OF_WEEK); - if (Calendar.MONDAY == dayOfWeek) { - viewPager.setCurrentItem(0); - } else if (Calendar.TUESDAY == dayOfWeek) { - viewPager.setCurrentItem(1); - } else if (Calendar.WEDNESDAY == dayOfWeek) { - viewPager.setCurrentItem(2); - } else if (Calendar.THURSDAY == dayOfWeek) { - viewPager.setCurrentItem(3); - } else if (Calendar.FRIDAY == dayOfWeek) { - viewPager.setCurrentItem(4); - } else if (Calendar.SATURDAY == dayOfWeek) { - viewPager.setCurrentItem(5); - } else if (Calendar.SUNDAY == dayOfWeek) { - viewPager.setCurrentItem(6); - } - FloatingActionButton fab = view.findViewById(R.id.fabTimeTable); - fab.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - count = 0; - showTimeTableDialog(); - } - }); - return view; - } - - public void showTimeTableDialog() { - final AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(getActivity()); - final LayoutInflater inflater = getActivity().getLayoutInflater(); - @SuppressLint("InflateParams") final View dialogView = inflater.inflate(R.layout.dialog_add_timetable, null); - - startTime = dialogView.findViewById(R.id.startTime); - endTime = dialogView.findViewById(R.id.endTime); - Button btnCancel = dialogView.findViewById(R.id.btnCancel); - btnNext = dialogView.findViewById(R.id.btnNext); - textDialog = dialogView.findViewById(R.id.textDialog); - spinnerSubjects = dialogView.findViewById(R.id.spinnerSubjects); - roomN = dialogView.findViewById(R.id.room); - setSubjectList(); - ArrayAdapter spinnerAdapter = new ArrayAdapter(getActivity(), android.R.layout.simple_spinner_item, subjectsList) { - @Override - public boolean isEnabled(int position) { - return position != 0; - } - - @Override - public View getDropDownView(int position, View convertView, @NonNull ViewGroup parent) { - View view = super.getDropDownView(position, convertView, parent); - TextView tv = (TextView) view; - if (position == 0) { - tv.setTextColor(Color.GRAY); - } else { - tv.setTextColor(Color.BLACK); - } - return view; - } - }; - spinnerAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); - spinnerSubjects.setAdapter(spinnerAdapter); - - startTime.setVisibility(View.GONE); - endTime.setVisibility(View.GONE); - roomN.setVisibility(View.GONE); - dialogBuilder.setView(dialogView); - textDialog.setText(getResources().getString(R.string.choose_subject)); - final AlertDialog dialog = dialogBuilder.create(); - btnCancel.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - dialog.dismiss(); - } - }); - btnNext.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - count++; - if (count == 1) { - if (spinnerSubjects.getSelectedItemPosition() != 0) { - spinnerSubjects.setVisibility(View.GONE); - textDialog.setText(getResources().getString(R.string.enter_room_number)); - roomN.setVisibility(View.VISIBLE); - } else { - Toast.makeText(getActivity(), "Please select a subject", Toast.LENGTH_SHORT).show(); - count--; - } - } else if(count==2) { - roomN.setVisibility(View.GONE); - textDialog.setText(getResources().getString(R.string.enter_start_time)); - startTime.setVisibility(View.VISIBLE); - btnNext.setText(getResources().getString(R.string.next)); - } - else if (count == 3) { - startTime.setVisibility(View.GONE); - textDialog.setText(getResources().getString(R.string.enter_end_time)); - endTime.setVisibility(View.VISIBLE); - btnNext.setText(getResources().getString(R.string.done)); - } else if (count == 4) { - int startHour, startMinute, endHour, endMinute; - if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) { - startHour = startTime.getCurrentHour(); - startMinute = startTime.getCurrentMinute(); - endHour = endTime.getCurrentHour(); - endMinute = endTime.getCurrentMinute(); - - } else { - startHour = startTime.getHour(); - startMinute = startTime.getMinute(); - endHour = endTime.getHour(); - endMinute = endTime.getMinute(); - } - if ((endHour > startHour) || ((endHour == startHour) && (endMinute > startMinute))) { - String edit = roomN.getText().toString().trim(); - int day = tabLayout.getSelectedTabPosition(); - String subjectName = subjectsList.get(spinnerSubjects.getSelectedItemPosition()); - fragmentDatabase.add(new FragmentDetails(day, subjectName, startHour, startMinute, endHour, endMinute,edit)); - dialog.dismiss(); - viewPager.getAdapter().notifyDataSetChanged(); - SharedPreferences mSharedPreference = PreferenceManager.getDefaultSharedPreferences(getActivity().getBaseContext()); - int notificationTime = Integer.parseInt(mSharedPreference.getString("NOTIFICATION_TIME", "-1")); - Log.d(TAG,Integer.toString(notificationTime)); - if (notificationTime != -1) { - setAlarmForNotification(subjectName, day, notificationTime, startHour, startMinute); - } - } else { - Toast.makeText(getActivity(), getResources().getString(R.string.end_time_should_be), Toast.LENGTH_LONG).show(); - count--; - } - } - - } - }); - dialog.show(); - } - - private void setSubjectList() { - int breakFlag = 0; - subjectsList.clear(); - subjectsList.add("Select one"); - for (SubjectDetails subjectDetails : subjectDatabase.getSubjectDetail()) { - if (breakFlag == 0) { - if (subjectDetails.getSubject().compareTo("Break") > 0) { - subjectsList.add(getResources().getString(R.string.Break)); - breakFlag++; - } - } - subjectsList.add(subjectDetails.getSubject()); - } - if (breakFlag == 0) { - subjectsList.add(getResources().getString(R.string.Break)); - } - } - - private void setAlarmForNotification(String subjectName, int day, int notificationTime, int startHour, int startMinute) { - int dayOfWeek = (day + 2) % 7; - Calendar calendar = Calendar.getInstance(); - if (calendar.get(Calendar.DAY_OF_WEEK) > dayOfWeek) { - calendar.set(Calendar.WEEK_OF_MONTH, calendar.get(Calendar.WEEK_OF_MONTH) + 1); - } - calendar.set(Calendar.DAY_OF_WEEK, dayOfWeek); - calendar.set(Calendar.HOUR_OF_DAY, startHour); - calendar.set(Calendar.MINUTE, startMinute); - calendar.set(Calendar.SECOND, 0); - calendar.set(Calendar.MILLISECOND, 0); - calendar.setTimeInMillis(calendar.getTimeInMillis() - notificationTime * MINUTE); - Intent myIntent = new Intent(getActivity(), MyReceiver.class); - int requestCode = (int) System.currentTimeMillis()/1000; - myIntent.putExtra("SUBJECT_NAME", subjectName); - myIntent.putExtra("START_TIME", String.format(Locale.US, "%02d:%02d", startHour, startMinute)); - PendingIntent pendingIntent = PendingIntent.getBroadcast(getActivity(), requestCode, myIntent, PendingIntent.FLAG_UPDATE_CURRENT); - Alarms alarms = new Alarms(); - alarms.setContext(getActivity()); - alarms.setPendingIntent(pendingIntent); - MyPreferenceFragment mpf = new MyPreferenceFragment(); - mpf.addAlarm(alarms); - AlarmManager alarmManager = (AlarmManager) getActivity().getSystemService(ALARM_SERVICE); - alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY * 7, pendingIntent); - } -} diff --git a/app/src/main/java/com/nealgosalia/timetable/fragments/TimetableFragment.kt b/app/src/main/java/com/nealgosalia/timetable/fragments/TimetableFragment.kt new file mode 100644 index 0000000..441d083 --- /dev/null +++ b/app/src/main/java/com/nealgosalia/timetable/fragments/TimetableFragment.kt @@ -0,0 +1,256 @@ +package com.nealgosalia.timetable.fragments + +import android.annotation.SuppressLint +import android.app.AlarmManager +import android.app.PendingIntent +import android.content.Intent +import android.content.SharedPreferences +import android.graphics.Color +import android.os.Build +import android.os.Bundle +import android.preference.PreferenceManager +import android.support.design.widget.FloatingActionButton +import android.support.design.widget.TabLayout +import android.support.v4.app.Fragment +import android.support.v4.view.ViewPager +import android.support.v7.app.AlertDialog +import android.util.Log +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ArrayAdapter +import android.widget.Button +import android.widget.EditText +import android.widget.Spinner +import android.widget.TextView +import android.widget.TimePicker +import android.widget.Toast + +import com.nealgosalia.timetable.R +import com.nealgosalia.timetable.adapters.SimpleFragmentPagerAdapter +import com.nealgosalia.timetable.database.FragmentDatabase +import com.nealgosalia.timetable.database.FragmentDetails +import com.nealgosalia.timetable.database.SubjectDatabase +import com.nealgosalia.timetable.database.SubjectDetails +import com.nealgosalia.timetable.receivers.MyReceiver +import com.nealgosalia.timetable.utils.Alarms + +import java.util.ArrayList +import java.util.Calendar +import java.util.Locale + +import android.content.Context.ALARM_SERVICE + + +class TimetableFragment : Fragment() { + private var btnNext: Button? = null + private val subjectsList = ArrayList() + private var spinnerSubjects: Spinner? = null + private var tabLayout: TabLayout? = null + private var textDialog: TextView? = null + private var startTime: TimePicker? = null + private var endTime: TimePicker? = null + private var viewPager: ViewPager? = null + private var roomN: EditText? = null + private var count: Int = 0 + private var fragmentDatabase: FragmentDatabase? = null + private var subjectDatabase: SubjectDatabase? = null + + @Override + fun onCreateView(inflater: LayoutInflater, container: ViewGroup, + savedInstanceState: Bundle): View { + val view = inflater.inflate(R.layout.activity_timetable, container, false) + fragmentDatabase = FragmentDatabase(getActivity()) + subjectDatabase = SubjectDatabase(getActivity()) + viewPager = view.findViewById(R.id.viewpager) + viewPager!!.setAdapter(SimpleFragmentPagerAdapter(getChildFragmentManager(), getActivity())) + tabLayout = view.findViewById(R.id.sliding_tabs) + tabLayout!!.setupWithViewPager(viewPager) + val c = Calendar.getInstance() + val dayOfWeek = c.get(Calendar.DAY_OF_WEEK) + if (Calendar.MONDAY === dayOfWeek) { + viewPager!!.setCurrentItem(0) + } else if (Calendar.TUESDAY === dayOfWeek) { + viewPager!!.setCurrentItem(1) + } else if (Calendar.WEDNESDAY === dayOfWeek) { + viewPager!!.setCurrentItem(2) + } else if (Calendar.THURSDAY === dayOfWeek) { + viewPager!!.setCurrentItem(3) + } else if (Calendar.FRIDAY === dayOfWeek) { + viewPager!!.setCurrentItem(4) + } else if (Calendar.SATURDAY === dayOfWeek) { + viewPager!!.setCurrentItem(5) + } else if (Calendar.SUNDAY === dayOfWeek) { + viewPager!!.setCurrentItem(6) + } + val fab = view.findViewById(R.id.fabTimeTable) + fab.setOnClickListener(object : View.OnClickListener() { + @Override + fun onClick(view: View) { + count = 0 + showTimeTableDialog() + } + }) + return view + } + + fun showTimeTableDialog() { + val dialogBuilder = AlertDialog.Builder(getActivity()) + val inflater = getActivity().getLayoutInflater() + @SuppressLint("InflateParams") val dialogView = inflater.inflate(R.layout.dialog_add_timetable, null) + + startTime = dialogView.findViewById(R.id.startTime) + endTime = dialogView.findViewById(R.id.endTime) + val btnCancel = dialogView.findViewById(R.id.btnCancel) + btnNext = dialogView.findViewById(R.id.btnNext) + textDialog = dialogView.findViewById(R.id.textDialog) + spinnerSubjects = dialogView.findViewById(R.id.spinnerSubjects) + roomN = dialogView.findViewById(R.id.room) + setSubjectList() + val spinnerAdapter = object : ArrayAdapter(getActivity(), android.R.layout.simple_spinner_item, subjectsList) { + @Override + fun isEnabled(position: Int): Boolean { + return position != 0 + } + + @Override + fun getDropDownView(position: Int, convertView: View, @NonNull parent: ViewGroup): View { + val view = super.getDropDownView(position, convertView, parent) + val tv = view as TextView + if (position == 0) { + tv.setTextColor(Color.GRAY) + } else { + tv.setTextColor(Color.BLACK) + } + return view + } + } + spinnerAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item) + spinnerSubjects!!.setAdapter(spinnerAdapter) + + startTime!!.setVisibility(View.GONE) + endTime!!.setVisibility(View.GONE) + roomN!!.setVisibility(View.GONE) + dialogBuilder.setView(dialogView) + textDialog!!.setText(getResources().getString(R.string.choose_subject)) + val dialog = dialogBuilder.create() + btnCancel.setOnClickListener(object : View.OnClickListener() { + @Override + fun onClick(view: View) { + dialog.dismiss() + } + }) + btnNext!!.setOnClickListener(object : View.OnClickListener() { + @Override + fun onClick(view: View) { + count++ + if (count == 1) { + if (spinnerSubjects!!.getSelectedItemPosition() !== 0) { + spinnerSubjects!!.setVisibility(View.GONE) + textDialog!!.setText(getResources().getString(R.string.enter_room_number)) + roomN!!.setVisibility(View.VISIBLE) + } else { + Toast.makeText(getActivity(), "Please select a subject", Toast.LENGTH_SHORT).show() + count-- + } + } else if (count == 2) { + roomN!!.setVisibility(View.GONE) + textDialog!!.setText(getResources().getString(R.string.enter_start_time)) + startTime!!.setVisibility(View.VISIBLE) + btnNext!!.setText(getResources().getString(R.string.next)) + } else if (count == 3) { + startTime!!.setVisibility(View.GONE) + textDialog!!.setText(getResources().getString(R.string.enter_end_time)) + endTime!!.setVisibility(View.VISIBLE) + btnNext!!.setText(getResources().getString(R.string.done)) + } else if (count == 4) { + val startHour: Int + val startMinute: Int + val endHour: Int + val endMinute: Int + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) { + startHour = startTime!!.getCurrentHour() + startMinute = startTime!!.getCurrentMinute() + endHour = endTime!!.getCurrentHour() + endMinute = endTime!!.getCurrentMinute() + + } else { + startHour = startTime!!.getHour() + startMinute = startTime!!.getMinute() + endHour = endTime!!.getHour() + endMinute = endTime!!.getMinute() + } + if (endHour > startHour || endHour == startHour && endMinute > startMinute) { + val edit = roomN!!.getText().toString().trim() + val day = tabLayout!!.getSelectedTabPosition() + val subjectName = subjectsList.get(spinnerSubjects!!.getSelectedItemPosition()) + fragmentDatabase!!.add(FragmentDetails(day, subjectName, startHour, startMinute, endHour, endMinute, edit)) + dialog.dismiss() + viewPager!!.getAdapter().notifyDataSetChanged() + val mSharedPreference = PreferenceManager.getDefaultSharedPreferences(getActivity().getBaseContext()) + val notificationTime = Integer.parseInt(mSharedPreference.getString("NOTIFICATION_TIME", "-1")) + Log.d(TAG, Integer.toString(notificationTime)) + if (notificationTime != -1) { + setAlarmForNotification(subjectName, day, notificationTime, startHour, startMinute) + } + } else { + Toast.makeText(getActivity(), getResources().getString(R.string.end_time_should_be), Toast.LENGTH_LONG).show() + count-- + } + } + + } + }) + dialog.show() + } + + private fun setSubjectList() { + var breakFlag = 0 + subjectsList.clear() + subjectsList.add("Select one") + for (subjectDetails in subjectDatabase!!.getSubjectDetail()) { + if (breakFlag == 0) { + if (subjectDetails.getSubject().compareTo("Break") > 0) { + subjectsList.add(getResources().getString(R.string.Break)) + breakFlag++ + } + } + subjectsList.add(subjectDetails.getSubject()) + } + if (breakFlag == 0) { + subjectsList.add(getResources().getString(R.string.Break)) + } + } + + private fun setAlarmForNotification(subjectName: String, day: Int, notificationTime: Int, startHour: Int, startMinute: Int) { + val dayOfWeek = (day + 2) % 7 + val calendar = Calendar.getInstance() + if (calendar.get(Calendar.DAY_OF_WEEK) > dayOfWeek) { + calendar.set(Calendar.WEEK_OF_MONTH, calendar.get(Calendar.WEEK_OF_MONTH) + 1) + } + calendar.set(Calendar.DAY_OF_WEEK, dayOfWeek) + calendar.set(Calendar.HOUR_OF_DAY, startHour) + calendar.set(Calendar.MINUTE, startMinute) + calendar.set(Calendar.SECOND, 0) + calendar.set(Calendar.MILLISECOND, 0) + calendar.setTimeInMillis(calendar.getTimeInMillis() - notificationTime * MINUTE) + val myIntent = Intent(getActivity(), MyReceiver::class.java) + val requestCode = System.currentTimeMillis() as Int / 1000 + myIntent.putExtra("SUBJECT_NAME", subjectName) + myIntent.putExtra("START_TIME", String.format(Locale.US, "%02d:%02d", startHour, startMinute)) + val pendingIntent = PendingIntent.getBroadcast(getActivity(), requestCode, myIntent, PendingIntent.FLAG_UPDATE_CURRENT) + val alarms = Alarms() + alarms.setContext(getActivity()) + alarms.setPendingIntent(pendingIntent) + val mpf = MyPreferenceFragment() + mpf.addAlarm(alarms) + val alarmManager = getActivity().getSystemService(ALARM_SERVICE) as AlarmManager + alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY * 7, pendingIntent) + } + + companion object { + + private val MINUTE = 60000 + private val TAG = "TimetableFragment" + } +} diff --git a/app/src/main/java/com/nealgosalia/timetable/fragments/TuesdayFragment.java b/app/src/main/java/com/nealgosalia/timetable/fragments/TuesdayFragment.java deleted file mode 100644 index cae40ed..0000000 --- a/app/src/main/java/com/nealgosalia/timetable/fragments/TuesdayFragment.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.nealgosalia.timetable.fragments; - -import android.app.AlertDialog; -import android.content.DialogInterface; -import android.os.Bundle; -import android.support.v4.app.Fragment; -import android.support.v7.widget.DefaultItemAnimator; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import com.nealgosalia.timetable.R; -import com.nealgosalia.timetable.adapters.LecturesAdapter; -import com.nealgosalia.timetable.database.FragmentDatabase; -import com.nealgosalia.timetable.database.FragmentDetails; -import com.nealgosalia.timetable.utils.DividerItemDecoration; -import com.nealgosalia.timetable.utils.Lecture; -import com.nealgosalia.timetable.utils.RecyclerItemClickListener; - -import java.util.ArrayList; -import java.util.List; - -public class TuesdayFragment extends Fragment { - - private FragmentDatabase db; - private List lecturesList = new ArrayList<>(); - private RecyclerView recyclerLectures; - private LecturesAdapter mLectureAdapter; - private TextView placeholderText; - private View view; - - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { - view = inflater.inflate(R.layout.fragment_tuesday, container, false); - placeholderText = view.findViewById(R.id.tuesdayPlaceholderText); - db = new FragmentDatabase(getActivity()); - lecturesList = new ArrayList<>(db.getLectureList(1)); - if (lecturesList.size() != 0) { - placeholderText.setVisibility(View.GONE); - } - recyclerLectures = view.findViewById(R.id.listTuesday); - mLectureAdapter = new LecturesAdapter(lecturesList); - RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getActivity()); - recyclerLectures.setLayoutManager(mLayoutManager); - recyclerLectures.setItemAnimator(new DefaultItemAnimator()); - recyclerLectures.addItemDecoration(new DividerItemDecoration(getContext(), LinearLayoutManager.VERTICAL)); - recyclerLectures.setAdapter(mLectureAdapter); - recyclerLectures.addOnItemTouchListener(new RecyclerItemClickListener(getContext(), new RecyclerItemClickListener.OnItemClickListener() { - @Override public void onItemClick(View view, int position) { - Lecture lecture = lecturesList.get(position); - showDeleteDialog(lecture, position); - } - })); - return view; - } - - public void showDeleteDialog(final Lecture lecture, final int position) { - AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(getContext()); - dialogBuilder.setTitle(getResources().getString(R.string.delete)); - dialogBuilder.setMessage(getResources().getString(R.string.delete_lecture)); - dialogBuilder.setPositiveButton(getResources().getString(R.string.yes), new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int whichButton) { - FragmentDetails fd = new FragmentDetails( - lecture.getDay(), - lecture.getSubjectName(), - Integer.parseInt(lecture.getStartTime().substring(0,2)), - Integer.parseInt(lecture.getStartTime().substring(3,5)), - Integer.parseInt(lecture.getEndTime().substring(0,2)), - Integer.parseInt(lecture.getEndTime().substring(3,5)), - lecture.getRoomNo() - - - ); - db.remove(fd); - lecturesList.remove(position); - mLectureAdapter.notifyDataSetChanged(); - } - }); - dialogBuilder.setNegativeButton(getResources().getString(R.string.no), null); - AlertDialog b = dialogBuilder.create(); - b.show(); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/nealgosalia/timetable/fragments/TuesdayFragment.kt b/app/src/main/java/com/nealgosalia/timetable/fragments/TuesdayFragment.kt new file mode 100644 index 0000000..70e46c2 --- /dev/null +++ b/app/src/main/java/com/nealgosalia/timetable/fragments/TuesdayFragment.kt @@ -0,0 +1,87 @@ +package com.nealgosalia.timetable.fragments + +import android.app.AlertDialog +import android.content.DialogInterface +import android.os.Bundle +import android.support.v4.app.Fragment +import android.support.v7.widget.DefaultItemAnimator +import android.support.v7.widget.LinearLayoutManager +import android.support.v7.widget.RecyclerView +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView + +import com.nealgosalia.timetable.R +import com.nealgosalia.timetable.adapters.LecturesAdapter +import com.nealgosalia.timetable.database.FragmentDatabase +import com.nealgosalia.timetable.database.FragmentDetails +import com.nealgosalia.timetable.utils.DividerItemDecoration +import com.nealgosalia.timetable.utils.Lecture +import com.nealgosalia.timetable.utils.RecyclerItemClickListener + +import java.util.ArrayList + +class TuesdayFragment : Fragment() { + + private var db: FragmentDatabase? = null + private var lecturesList: List = ArrayList() + private var recyclerLectures: RecyclerView? = null + private var mLectureAdapter: LecturesAdapter? = null + private var placeholderText: TextView? = null + private var view: View? = null + + @Override + fun onCreateView(inflater: LayoutInflater, container: ViewGroup, + savedInstanceState: Bundle): View? { + view = inflater.inflate(R.layout.fragment_tuesday, container, false) + placeholderText = view!!.findViewById(R.id.tuesdayPlaceholderText) + db = FragmentDatabase(getActivity()) + lecturesList = ArrayList(db!!.getLectureList(1)) + if (lecturesList.size() !== 0) { + placeholderText!!.setVisibility(View.GONE) + } + recyclerLectures = view!!.findViewById(R.id.listTuesday) + mLectureAdapter = LecturesAdapter(lecturesList) + val mLayoutManager = LinearLayoutManager(getActivity()) + recyclerLectures!!.setLayoutManager(mLayoutManager) + recyclerLectures!!.setItemAnimator(DefaultItemAnimator()) + recyclerLectures!!.addItemDecoration(DividerItemDecoration(getContext(), LinearLayoutManager.VERTICAL)) + recyclerLectures!!.setAdapter(mLectureAdapter) + recyclerLectures!!.addOnItemTouchListener(RecyclerItemClickListener(getContext(), object : RecyclerItemClickListener.OnItemClickListener() { + @Override + fun onItemClick(view: View, position: Int) { + val lecture = lecturesList[position] + showDeleteDialog(lecture, position) + } + })) + return view + } + + fun showDeleteDialog(lecture: Lecture, position: Int) { + val dialogBuilder = AlertDialog.Builder(getContext()) + dialogBuilder.setTitle(getResources().getString(R.string.delete)) + dialogBuilder.setMessage(getResources().getString(R.string.delete_lecture)) + dialogBuilder.setPositiveButton(getResources().getString(R.string.yes), object : DialogInterface.OnClickListener() { + fun onClick(dialog: DialogInterface, whichButton: Int) { + val fd = FragmentDetails( + lecture.getDay(), + lecture.getSubjectName(), + Integer.parseInt(lecture.getStartTime().substring(0, 2)), + Integer.parseInt(lecture.getStartTime().substring(3, 5)), + Integer.parseInt(lecture.getEndTime().substring(0, 2)), + Integer.parseInt(lecture.getEndTime().substring(3, 5)), + lecture.getRoomNo() + + + ) + db!!.remove(fd) + lecturesList.remove(position) + mLectureAdapter!!.notifyDataSetChanged() + } + }) + dialogBuilder.setNegativeButton(getResources().getString(R.string.no), null) + val b = dialogBuilder.create() + b.show() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/nealgosalia/timetable/fragments/WednesdayFragment.java b/app/src/main/java/com/nealgosalia/timetable/fragments/WednesdayFragment.java deleted file mode 100644 index b215dd3..0000000 --- a/app/src/main/java/com/nealgosalia/timetable/fragments/WednesdayFragment.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.nealgosalia.timetable.fragments; - -import android.app.AlertDialog; -import android.content.DialogInterface; -import android.os.Bundle; -import android.support.v4.app.Fragment; -import android.support.v7.widget.DefaultItemAnimator; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import com.nealgosalia.timetable.R; -import com.nealgosalia.timetable.adapters.LecturesAdapter; -import com.nealgosalia.timetable.database.FragmentDatabase; -import com.nealgosalia.timetable.database.FragmentDetails; -import com.nealgosalia.timetable.utils.DividerItemDecoration; -import com.nealgosalia.timetable.utils.Lecture; -import com.nealgosalia.timetable.utils.RecyclerItemClickListener; - -import java.util.ArrayList; -import java.util.List; - -public class WednesdayFragment extends Fragment { - - private FragmentDatabase db; - private List lecturesList = new ArrayList<>(); - private RecyclerView recyclerLectures; - private LecturesAdapter mLectureAdapter; - private TextView placeholderText; - private View view; - - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { - view = inflater.inflate(R.layout.fragment_wednesday, container, false); - placeholderText = view.findViewById(R.id.wednesdayPlaceholderText); - db = new FragmentDatabase(getActivity()); - lecturesList = new ArrayList<>(db.getLectureList(2)); - if (lecturesList.size() != 0) { - placeholderText.setVisibility(View.GONE); - } - recyclerLectures = view.findViewById(R.id.listWednesday); - mLectureAdapter = new LecturesAdapter(lecturesList); - RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getActivity()); - recyclerLectures.setLayoutManager(mLayoutManager); - recyclerLectures.setItemAnimator(new DefaultItemAnimator()); - recyclerLectures.addItemDecoration(new DividerItemDecoration(getContext(), LinearLayoutManager.VERTICAL)); - recyclerLectures.setAdapter(mLectureAdapter); - recyclerLectures.addOnItemTouchListener(new RecyclerItemClickListener(getContext(), new RecyclerItemClickListener.OnItemClickListener() { - @Override public void onItemClick(View view, int position) { - Lecture lecture = lecturesList.get(position); - showDeleteDialog(lecture, position); - } - })); - return view; - } - - public void showDeleteDialog(final Lecture lecture, final int position) { - AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(getContext()); - dialogBuilder.setTitle(getResources().getString(R.string.delete)); - dialogBuilder.setMessage(getResources().getString(R.string.delete_lecture)); - dialogBuilder.setPositiveButton(getResources().getString(R.string.yes), new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int whichButton) { - FragmentDetails fd = new FragmentDetails( - lecture.getDay(), - lecture.getSubjectName(), - Integer.parseInt(lecture.getStartTime().substring(0,2)), - Integer.parseInt(lecture.getStartTime().substring(3,5)), - Integer.parseInt(lecture.getEndTime().substring(0,2)), - Integer.parseInt(lecture.getEndTime().substring(3,5)), - lecture.getRoomNo() - - - ); - db.remove(fd); - lecturesList.remove(position); - mLectureAdapter.notifyDataSetChanged(); - } - }); - dialogBuilder.setNegativeButton(getResources().getString(R.string.no), null); - AlertDialog b = dialogBuilder.create(); - b.show(); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/nealgosalia/timetable/fragments/WednesdayFragment.kt b/app/src/main/java/com/nealgosalia/timetable/fragments/WednesdayFragment.kt new file mode 100644 index 0000000..efd2c6b --- /dev/null +++ b/app/src/main/java/com/nealgosalia/timetable/fragments/WednesdayFragment.kt @@ -0,0 +1,87 @@ +package com.nealgosalia.timetable.fragments + +import android.app.AlertDialog +import android.content.DialogInterface +import android.os.Bundle +import android.support.v4.app.Fragment +import android.support.v7.widget.DefaultItemAnimator +import android.support.v7.widget.LinearLayoutManager +import android.support.v7.widget.RecyclerView +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView + +import com.nealgosalia.timetable.R +import com.nealgosalia.timetable.adapters.LecturesAdapter +import com.nealgosalia.timetable.database.FragmentDatabase +import com.nealgosalia.timetable.database.FragmentDetails +import com.nealgosalia.timetable.utils.DividerItemDecoration +import com.nealgosalia.timetable.utils.Lecture +import com.nealgosalia.timetable.utils.RecyclerItemClickListener + +import java.util.ArrayList + +class WednesdayFragment : Fragment() { + + private var db: FragmentDatabase? = null + private var lecturesList: List = ArrayList() + private var recyclerLectures: RecyclerView? = null + private var mLectureAdapter: LecturesAdapter? = null + private var placeholderText: TextView? = null + private var view: View? = null + + @Override + fun onCreateView(inflater: LayoutInflater, container: ViewGroup, + savedInstanceState: Bundle): View? { + view = inflater.inflate(R.layout.fragment_wednesday, container, false) + placeholderText = view!!.findViewById(R.id.wednesdayPlaceholderText) + db = FragmentDatabase(getActivity()) + lecturesList = ArrayList(db!!.getLectureList(2)) + if (lecturesList.size() !== 0) { + placeholderText!!.setVisibility(View.GONE) + } + recyclerLectures = view!!.findViewById(R.id.listWednesday) + mLectureAdapter = LecturesAdapter(lecturesList) + val mLayoutManager = LinearLayoutManager(getActivity()) + recyclerLectures!!.setLayoutManager(mLayoutManager) + recyclerLectures!!.setItemAnimator(DefaultItemAnimator()) + recyclerLectures!!.addItemDecoration(DividerItemDecoration(getContext(), LinearLayoutManager.VERTICAL)) + recyclerLectures!!.setAdapter(mLectureAdapter) + recyclerLectures!!.addOnItemTouchListener(RecyclerItemClickListener(getContext(), object : RecyclerItemClickListener.OnItemClickListener() { + @Override + fun onItemClick(view: View, position: Int) { + val lecture = lecturesList[position] + showDeleteDialog(lecture, position) + } + })) + return view + } + + fun showDeleteDialog(lecture: Lecture, position: Int) { + val dialogBuilder = AlertDialog.Builder(getContext()) + dialogBuilder.setTitle(getResources().getString(R.string.delete)) + dialogBuilder.setMessage(getResources().getString(R.string.delete_lecture)) + dialogBuilder.setPositiveButton(getResources().getString(R.string.yes), object : DialogInterface.OnClickListener() { + fun onClick(dialog: DialogInterface, whichButton: Int) { + val fd = FragmentDetails( + lecture.getDay(), + lecture.getSubjectName(), + Integer.parseInt(lecture.getStartTime().substring(0, 2)), + Integer.parseInt(lecture.getStartTime().substring(3, 5)), + Integer.parseInt(lecture.getEndTime().substring(0, 2)), + Integer.parseInt(lecture.getEndTime().substring(3, 5)), + lecture.getRoomNo() + + + ) + db!!.remove(fd) + lecturesList.remove(position) + mLectureAdapter!!.notifyDataSetChanged() + } + }) + dialogBuilder.setNegativeButton(getResources().getString(R.string.no), null) + val b = dialogBuilder.create() + b.show() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/nealgosalia/timetable/receivers/MyReceiver.java b/app/src/main/java/com/nealgosalia/timetable/receivers/MyReceiver.java deleted file mode 100644 index babe4bc..0000000 --- a/app/src/main/java/com/nealgosalia/timetable/receivers/MyReceiver.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.nealgosalia.timetable.receivers; - -import android.app.Notification; -import android.app.NotificationManager; -import android.app.PendingIntent; -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; -import android.graphics.Color; -import android.support.v4.app.NotificationCompat; - -import com.nealgosalia.timetable.MainActivity; -import com.nealgosalia.timetable.R; - -/** - * Created by kira on 16/12/16. - */ - -public class MyReceiver extends BroadcastReceiver { - - @Override - public void onReceive(Context context, Intent intent) { - String subjectName = intent.getExtras().getString("SUBJECT_NAME"); - String startTime = intent.getExtras().getString("START_TIME"); - showNotification(context, subjectName, startTime); - } - - public void showNotification(Context context, String subjectName, String startTime) { - Intent intent = new Intent(context, MainActivity.class); - PendingIntent pi = PendingIntent.getActivity(context, 0, intent, 0); - NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context) - .setSmallIcon(R.drawable.ic_notification) - .setContentTitle(subjectName) - .setContentText("at " + startTime) - .setColor(Color.argb(255, 67, 133, 244)); - mBuilder.setContentIntent(pi); - mBuilder.setDefaults(Notification.DEFAULT_VIBRATE); - mBuilder.setAutoCancel(true); - NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); - mNotificationManager.cancelAll(); - mNotificationManager.notify(0, mBuilder.build()); - } -} diff --git a/app/src/main/java/com/nealgosalia/timetable/receivers/MyReceiver.kt b/app/src/main/java/com/nealgosalia/timetable/receivers/MyReceiver.kt new file mode 100644 index 0000000..86ae8a9 --- /dev/null +++ b/app/src/main/java/com/nealgosalia/timetable/receivers/MyReceiver.kt @@ -0,0 +1,43 @@ +package com.nealgosalia.timetable.receivers + +import android.app.Notification +import android.app.NotificationManager +import android.app.PendingIntent +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent +import android.graphics.Color +import android.support.v4.app.NotificationCompat + +import com.nealgosalia.timetable.MainActivity +import com.nealgosalia.timetable.R + +/** + * Created by kira on 16/12/16. + */ + +class MyReceiver : BroadcastReceiver() { + + @Override + fun onReceive(context: Context, intent: Intent) { + val subjectName = intent.getExtras().getString("SUBJECT_NAME") + val startTime = intent.getExtras().getString("START_TIME") + showNotification(context, subjectName, startTime) + } + + fun showNotification(context: Context, subjectName: String, startTime: String) { + val intent = Intent(context, MainActivity::class.java) + val pi = PendingIntent.getActivity(context, 0, intent, 0) + val mBuilder = NotificationCompat.Builder(context) + .setSmallIcon(R.drawable.ic_notification) + .setContentTitle(subjectName) + .setContentText("at $startTime") + .setColor(Color.argb(255, 67, 133, 244)) + mBuilder.setContentIntent(pi) + mBuilder.setDefaults(Notification.DEFAULT_VIBRATE) + mBuilder.setAutoCancel(true) + val mNotificationManager = context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager + mNotificationManager.cancelAll() + mNotificationManager.notify(0, mBuilder.build()) + } +} diff --git a/app/src/main/java/com/nealgosalia/timetable/receivers/OnBootReceiver.java b/app/src/main/java/com/nealgosalia/timetable/receivers/OnBootReceiver.java deleted file mode 100644 index 84fcd8f..0000000 --- a/app/src/main/java/com/nealgosalia/timetable/receivers/OnBootReceiver.java +++ /dev/null @@ -1,67 +0,0 @@ -package com.nealgosalia.timetable.receivers; - -import android.app.AlarmManager; -import android.app.PendingIntent; -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; -import android.content.SharedPreferences; -import android.preference.PreferenceManager; -import android.util.Log; - -import com.nealgosalia.timetable.database.FragmentDatabase; -import com.nealgosalia.timetable.utils.Lecture; - -import java.util.ArrayList; -import java.util.Calendar; -import java.util.List; - -import static android.content.Context.ALARM_SERVICE; - -/** - * Created by kira on 18/12/16. - */ - -public class OnBootReceiver extends BroadcastReceiver { - - private static final int MINUTE = 60000; - private static final String TAG = "OnBootReceiver"; - private List lecturesList = new ArrayList<>(); - - @Override - public void onReceive(Context context, Intent intent) { - if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED) || intent.getAction().equals("com.nealgosalia.timetable.NOTIFY")) { - SharedPreferences mSharedPreference = PreferenceManager.getDefaultSharedPreferences(context); - int notificationTime = Integer.parseInt(mSharedPreference.getString("NOTIFICATION_TIME", "-1")); - if (notificationTime != -1) { - Log.d(TAG, intent.getAction()); - FragmentDatabase db = new FragmentDatabase(context); - Calendar calendar = Calendar.getInstance(); - lecturesList = new ArrayList<>(db.getLectureList()); - if (lecturesList.size() != 0) { - for (Lecture lecture : lecturesList) { - calendar.setTimeInMillis(System.currentTimeMillis()); - int dayOfWeek = (lecture.getDay() + 2) % 7; - if (calendar.get(Calendar.DAY_OF_WEEK) > dayOfWeek) { - calendar.set(Calendar.WEEK_OF_MONTH, calendar.get(Calendar.WEEK_OF_MONTH) + 1); - } - calendar.set(Calendar.DAY_OF_WEEK, dayOfWeek); - calendar.set(Calendar.HOUR_OF_DAY, Integer.parseInt(lecture.getStartTime().substring(0, 2))); - calendar.set(Calendar.MINUTE, Integer.parseInt(lecture.getStartTime().substring(3, 5))); - calendar.set(Calendar.SECOND, 0); - calendar.set(Calendar.MILLISECOND, 0); - calendar.setTimeInMillis(calendar.getTimeInMillis() - notificationTime * MINUTE); - Intent i = new Intent(context.getApplicationContext(), MyReceiver.class); - i.putExtra("SUBJECT_NAME", lecture.getSubjectName()); - i.putExtra("START_TIME", lecture.getStartTime()); - int randomRequestCode = (int) (calendar.getTimeInMillis()); - PendingIntent pendingIntent = PendingIntent.getBroadcast(context, randomRequestCode, i, PendingIntent.FLAG_UPDATE_CURRENT); - AlarmManager alarmManager = (AlarmManager) context.getSystemService(ALARM_SERVICE); - alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY * 7, pendingIntent); - Log.d(TAG, "Notification Time: " + String.valueOf(calendar.getTime()) + " " + String.valueOf(calendar.getTimeInMillis())); - } - } - } - } - } -} \ No newline at end of file diff --git a/app/src/main/java/com/nealgosalia/timetable/receivers/OnBootReceiver.kt b/app/src/main/java/com/nealgosalia/timetable/receivers/OnBootReceiver.kt new file mode 100644 index 0000000..3be15dc --- /dev/null +++ b/app/src/main/java/com/nealgosalia/timetable/receivers/OnBootReceiver.kt @@ -0,0 +1,69 @@ +package com.nealgosalia.timetable.receivers + +import android.app.AlarmManager +import android.app.PendingIntent +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent +import android.content.SharedPreferences +import android.preference.PreferenceManager +import android.util.Log + +import com.nealgosalia.timetable.database.FragmentDatabase +import com.nealgosalia.timetable.utils.Lecture + +import java.util.ArrayList +import java.util.Calendar + +import android.content.Context.ALARM_SERVICE + +/** + * Created by kira on 18/12/16. + */ + +class OnBootReceiver : BroadcastReceiver() { + private var lecturesList: List = ArrayList() + + @Override + fun onReceive(context: Context, intent: Intent) { + if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED) || intent.getAction().equals("com.nealgosalia.timetable.NOTIFY")) { + val mSharedPreference = PreferenceManager.getDefaultSharedPreferences(context) + val notificationTime = Integer.parseInt(mSharedPreference.getString("NOTIFICATION_TIME", "-1")) + if (notificationTime != -1) { + Log.d(TAG, intent.getAction()) + val db = FragmentDatabase(context) + val calendar = Calendar.getInstance() + lecturesList = ArrayList(db.getLectureList()) + if (lecturesList.size() !== 0) { + for (lecture in lecturesList) { + calendar.setTimeInMillis(System.currentTimeMillis()) + val dayOfWeek = (lecture.getDay() + 2) % 7 + if (calendar.get(Calendar.DAY_OF_WEEK) > dayOfWeek) { + calendar.set(Calendar.WEEK_OF_MONTH, calendar.get(Calendar.WEEK_OF_MONTH) + 1) + } + calendar.set(Calendar.DAY_OF_WEEK, dayOfWeek) + calendar.set(Calendar.HOUR_OF_DAY, Integer.parseInt(lecture.getStartTime().substring(0, 2))) + calendar.set(Calendar.MINUTE, Integer.parseInt(lecture.getStartTime().substring(3, 5))) + calendar.set(Calendar.SECOND, 0) + calendar.set(Calendar.MILLISECOND, 0) + calendar.setTimeInMillis(calendar.getTimeInMillis() - notificationTime * MINUTE) + val i = Intent(context.getApplicationContext(), MyReceiver::class.java) + i.putExtra("SUBJECT_NAME", lecture.getSubjectName()) + i.putExtra("START_TIME", lecture.getStartTime()) + val randomRequestCode = calendar.getTimeInMillis() as Int + val pendingIntent = PendingIntent.getBroadcast(context, randomRequestCode, i, PendingIntent.FLAG_UPDATE_CURRENT) + val alarmManager = context.getSystemService(ALARM_SERVICE) as AlarmManager + alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY * 7, pendingIntent) + Log.d(TAG, "Notification Time: " + String.valueOf(calendar.getTime()) + " " + String.valueOf(calendar.getTimeInMillis())) + } + } + } + } + } + + companion object { + + private val MINUTE = 60000 + private val TAG = "OnBootReceiver" + } +} \ No newline at end of file diff --git a/app/src/main/java/com/nealgosalia/timetable/utils/Alarms.java b/app/src/main/java/com/nealgosalia/timetable/utils/Alarms.java deleted file mode 100644 index 25b86cb..0000000 --- a/app/src/main/java/com/nealgosalia/timetable/utils/Alarms.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.nealgosalia.timetable.utils; - -import android.app.PendingIntent; -import android.content.Context; - -/** - * Created by kira on 20/12/16. - */ - -public class Alarms { - Context context; - PendingIntent pendingIntent; - - public Context getContext() { - return context; - } - - public void setContext(Context context) { - this.context = context; - } - - public PendingIntent getPendingIntent() { - return pendingIntent; - } - - public void setPendingIntent(PendingIntent pendingIntent) { - this.pendingIntent = pendingIntent; - } -} diff --git a/app/src/main/java/com/nealgosalia/timetable/utils/Alarms.kt b/app/src/main/java/com/nealgosalia/timetable/utils/Alarms.kt new file mode 100644 index 0000000..becca93 --- /dev/null +++ b/app/src/main/java/com/nealgosalia/timetable/utils/Alarms.kt @@ -0,0 +1,13 @@ +package com.nealgosalia.timetable.utils + +import android.app.PendingIntent +import android.content.Context + +/** + * Created by kira on 20/12/16. + */ + +class Alarms { + var context: Context + var pendingIntent: PendingIntent +} diff --git a/app/src/main/java/com/nealgosalia/timetable/utils/DividerItemDecoration.java b/app/src/main/java/com/nealgosalia/timetable/utils/DividerItemDecoration.java deleted file mode 100644 index 80def58..0000000 --- a/app/src/main/java/com/nealgosalia/timetable/utils/DividerItemDecoration.java +++ /dev/null @@ -1,89 +0,0 @@ -package com.nealgosalia.timetable.utils; - -import android.content.Context; -import android.content.res.TypedArray; -import android.graphics.Canvas; -import android.graphics.Rect; -import android.graphics.drawable.Drawable; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; -import android.view.View; - -public class DividerItemDecoration extends RecyclerView.ItemDecoration { - - private static final int[] ATTRS = new int[]{ - android.R.attr.listDivider - }; - - public static final int HORIZONTAL_LIST = LinearLayoutManager.HORIZONTAL; - - public static final int VERTICAL_LIST = LinearLayoutManager.VERTICAL; - - private Drawable mDivider; - - private int mOrientation; - - public DividerItemDecoration(Context context, int orientation) { - final TypedArray a = context.obtainStyledAttributes(ATTRS); - mDivider = a.getDrawable(0); - a.recycle(); - setOrientation(orientation); - } - - public void setOrientation(int orientation) { - if (orientation != HORIZONTAL_LIST && orientation != VERTICAL_LIST) { - throw new IllegalArgumentException("invalid orientation"); - } - mOrientation = orientation; - } - - @Override - public void onDrawOver(Canvas c, RecyclerView parent, RecyclerView.State state) { - if (mOrientation == VERTICAL_LIST) { - drawVertical(c, parent); - } else { - drawHorizontal(c, parent); - } - } - - public void drawVertical(Canvas c, RecyclerView parent) { - final int left = parent.getPaddingLeft(); - final int right = parent.getWidth() - parent.getPaddingRight(); - - final int childCount = parent.getChildCount(); - for (int i = 0; i < childCount; i++) { - final View child = parent.getChildAt(i); - final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child - .getLayoutParams(); - final int top = child.getBottom() + params.bottomMargin; - final int bottom = top + mDivider.getIntrinsicHeight(); - mDivider.setBounds(left, top, right, bottom); - mDivider.draw(c); - } - } - - public void drawHorizontal(Canvas c, RecyclerView parent) { - final int top = parent.getPaddingTop(); - final int bottom = parent.getHeight() - parent.getPaddingBottom(); - - final int childCount = parent.getChildCount(); - for (int i = 0; i < childCount; i++) { - final View child = parent.getChildAt(i); - final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child - .getLayoutParams(); - final int left = child.getRight() + params.rightMargin; - final int right = left + mDivider.getIntrinsicHeight(); - mDivider.setBounds(left, top, right, bottom); - mDivider.draw(c); - } - } - - @Override - public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) { - if (mOrientation == VERTICAL_LIST) { - outRect.set(0, 0, 0, mDivider.getIntrinsicHeight()); - } else { - outRect.set(0, 0, mDivider.getIntrinsicWidth(), 0); - } - } -} \ No newline at end of file diff --git a/app/src/main/java/com/nealgosalia/timetable/utils/DividerItemDecoration.kt b/app/src/main/java/com/nealgosalia/timetable/utils/DividerItemDecoration.kt new file mode 100644 index 0000000..5c3604b --- /dev/null +++ b/app/src/main/java/com/nealgosalia/timetable/utils/DividerItemDecoration.kt @@ -0,0 +1,90 @@ +package com.nealgosalia.timetable.utils + +import android.content.Context +import android.content.res.TypedArray +import android.graphics.Canvas +import android.graphics.Rect +import android.graphics.drawable.Drawable +import android.support.v7.widget.LinearLayoutManager +import android.support.v7.widget.RecyclerView +import android.view.View + +class DividerItemDecoration(context: Context, orientation: Int) : RecyclerView.ItemDecoration() { + + private val mDivider: Drawable + + private var mOrientation: Int = 0 + + init { + val a = context.obtainStyledAttributes(ATTRS) + mDivider = a.getDrawable(0) + a.recycle() + setOrientation(orientation) + } + + fun setOrientation(orientation: Int) { + if (orientation != HORIZONTAL_LIST && orientation != VERTICAL_LIST) { + throw IllegalArgumentException("invalid orientation") + } + mOrientation = orientation + } + + @Override + fun onDrawOver(c: Canvas, parent: RecyclerView, state: RecyclerView.State) { + if (mOrientation == VERTICAL_LIST) { + drawVertical(c, parent) + } else { + drawHorizontal(c, parent) + } + } + + fun drawVertical(c: Canvas, parent: RecyclerView) { + val left = parent.getPaddingLeft() + val right = parent.getWidth() - parent.getPaddingRight() + + val childCount = parent.getChildCount() + for (i in 0 until childCount) { + val child = parent.getChildAt(i) + val params = child + .getLayoutParams() as RecyclerView.LayoutParams + val top = child.getBottom() + params.bottomMargin + val bottom = top + mDivider.getIntrinsicHeight() + mDivider.setBounds(left, top, right, bottom) + mDivider.draw(c) + } + } + + fun drawHorizontal(c: Canvas, parent: RecyclerView) { + val top = parent.getPaddingTop() + val bottom = parent.getHeight() - parent.getPaddingBottom() + + val childCount = parent.getChildCount() + for (i in 0 until childCount) { + val child = parent.getChildAt(i) + val params = child + .getLayoutParams() as RecyclerView.LayoutParams + val left = child.getRight() + params.rightMargin + val right = left + mDivider.getIntrinsicHeight() + mDivider.setBounds(left, top, right, bottom) + mDivider.draw(c) + } + } + + @Override + fun getItemOffsets(outRect: Rect, view: View, parent: RecyclerView, state: RecyclerView.State) { + if (mOrientation == VERTICAL_LIST) { + outRect.set(0, 0, 0, mDivider.getIntrinsicHeight()) + } else { + outRect.set(0, 0, mDivider.getIntrinsicWidth(), 0) + } + } + + companion object { + + private val ATTRS = intArrayOf(android.R.attr.listDivider) + + val HORIZONTAL_LIST = LinearLayoutManager.HORIZONTAL + + val VERTICAL_LIST = LinearLayoutManager.VERTICAL + } +} \ No newline at end of file diff --git a/app/src/main/java/com/nealgosalia/timetable/utils/Lecture.java b/app/src/main/java/com/nealgosalia/timetable/utils/Lecture.java deleted file mode 100644 index 416fc98..0000000 --- a/app/src/main/java/com/nealgosalia/timetable/utils/Lecture.java +++ /dev/null @@ -1,66 +0,0 @@ -package com.nealgosalia.timetable.utils; - -import java.util.Comparator; - -public class Lecture implements Comparable { - - private String subjectName; - private String startTime; - private String endTime; - private String roomNo; - private int day; - - public int getDay() { - return day; - } - - public void setDay(int day) { - this.day = day; - } - - public String getSubjectName() { - return subjectName; - } - - public void setSubjectName(String subjectName) { - this.subjectName = subjectName; - } - - public String getStartTime() { - return startTime; - } - - public void setStartTime(String startTime) { - this.startTime = startTime; - } - - public String getEndTime() { - return endTime; - } - - public void setEndTime(String endTime) { - this.endTime = endTime; - } - public void setRoomNo(String roomNo) { - this.roomNo = roomNo; - } - public String getRoomNo(){ - return roomNo; - } - - - @Override - public int compareTo(Lecture o) { - return Lecture.Comparators.NAME.compare(this, o); - } - - public static class Comparators { - - public static Comparator NAME = new Comparator() { - @Override - public int compare(Lecture o1, Lecture o2) { - return o1.startTime.compareTo(o2.startTime); - } - }; - } -} diff --git a/app/src/main/java/com/nealgosalia/timetable/utils/Lecture.kt b/app/src/main/java/com/nealgosalia/timetable/utils/Lecture.kt new file mode 100644 index 0000000..c2ab13b --- /dev/null +++ b/app/src/main/java/com/nealgosalia/timetable/utils/Lecture.kt @@ -0,0 +1,28 @@ +package com.nealgosalia.timetable.utils + +import java.util.Comparator + +class Lecture : Comparable { + + var subjectName: String? = null + var startTime: String? = null + var endTime: String? = null + var roomNo: String? = null + var day: Int = 0 + + + @Override + fun compareTo(o: Lecture): Int { + return Lecture.Comparators.NAME.compare(this, o) + } + + object Comparators { + + var NAME: Comparator = object : Comparator() { + @Override + fun compare(o1: Lecture, o2: Lecture): Int { + return o1.startTime!!.compareTo(o2.startTime) + } + } + } +} diff --git a/app/src/main/java/com/nealgosalia/timetable/utils/RecyclerItemClickListener.java b/app/src/main/java/com/nealgosalia/timetable/utils/RecyclerItemClickListener.java deleted file mode 100644 index ec4a9cd..0000000 --- a/app/src/main/java/com/nealgosalia/timetable/utils/RecyclerItemClickListener.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.nealgosalia.timetable.utils; - -import android.content.Context; -import android.support.v7.widget.RecyclerView; -import android.view.GestureDetector; -import android.view.MotionEvent; -import android.view.View; - -/** - * Created by kira on 18/1/17. - */ - -public class RecyclerItemClickListener implements RecyclerView.OnItemTouchListener { - private OnItemClickListener mListener; - - public interface OnItemClickListener { - void onItemClick(View view, int position); - } - - GestureDetector mGestureDetector; - - public RecyclerItemClickListener(Context context, OnItemClickListener listener) { - mListener = listener; - mGestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() { - @Override - public boolean onSingleTapUp(MotionEvent e) { - return true; - } - }); - } - - @Override - public boolean onInterceptTouchEvent(RecyclerView view, MotionEvent e) { - View childView = view.findChildViewUnder(e.getX(), e.getY()); - if (childView != null && mListener != null && mGestureDetector.onTouchEvent(e)) { - mListener.onItemClick(childView, view.getChildAdapterPosition(childView)); - } - return false; - } - - @Override - public void onTouchEvent(RecyclerView view, MotionEvent motionEvent) { - } - - @Override - public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) { - } -} \ No newline at end of file diff --git a/app/src/main/java/com/nealgosalia/timetable/utils/RecyclerItemClickListener.kt b/app/src/main/java/com/nealgosalia/timetable/utils/RecyclerItemClickListener.kt new file mode 100644 index 0000000..0d3f96c --- /dev/null +++ b/app/src/main/java/com/nealgosalia/timetable/utils/RecyclerItemClickListener.kt @@ -0,0 +1,46 @@ +package com.nealgosalia.timetable.utils + +import android.content.Context +import android.support.v7.widget.RecyclerView +import android.view.GestureDetector +import android.view.MotionEvent +import android.view.View + +/** + * Created by kira on 18/1/17. + */ + +class RecyclerItemClickListener(context: Context, private val mListener: OnItemClickListener?) : RecyclerView.OnItemTouchListener { + + internal var mGestureDetector: GestureDetector + + interface OnItemClickListener { + fun onItemClick(view: View, position: Int) + } + + init { + mGestureDetector = GestureDetector(context, object : GestureDetector.SimpleOnGestureListener() { + @Override + fun onSingleTapUp(e: MotionEvent): Boolean { + return true + } + }) + } + + @Override + fun onInterceptTouchEvent(view: RecyclerView, e: MotionEvent): Boolean { + val childView = view.findChildViewUnder(e.getX(), e.getY()) + if (childView != null && mListener != null && mGestureDetector.onTouchEvent(e)) { + mListener.onItemClick(childView, view.getChildAdapterPosition(childView)) + } + return false + } + + @Override + fun onTouchEvent(view: RecyclerView, motionEvent: MotionEvent) { + } + + @Override + fun onRequestDisallowInterceptTouchEvent(disallowIntercept: Boolean) { + } +} \ No newline at end of file diff --git a/app/src/main/java/com/nealgosalia/timetable/utils/Subject.java b/app/src/main/java/com/nealgosalia/timetable/utils/Subject.java deleted file mode 100644 index 434eb1b..0000000 --- a/app/src/main/java/com/nealgosalia/timetable/utils/Subject.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.nealgosalia.timetable.utils; - -import java.util.Comparator; - -public class Subject implements Comparable { - - private String subjectName; - private int attendedLectures; - private int totalLectures; - - public Subject() { - } - - public int getAttendedLectures() { - return attendedLectures; - } - - public void setAttendedLectures(int attendedLectures) { - this.attendedLectures = attendedLectures; - } - - public int getTotalLectures() { - return totalLectures; - } - - public void setTotalLectures(int totalLectures) { - this.totalLectures = totalLectures; - } - - public String getSubjectName() { - return subjectName; - } - - public void setSubjectName(String subjectName) { - this.subjectName = subjectName; - } - - @Override - public int compareTo(Subject o) { - return Comparators.NAME.compare(this, o); - } - - - public static class Comparators { - - public static Comparator NAME = new Comparator() { - @Override - public int compare(Subject o1, Subject o2) { - return o1.subjectName.compareTo(o2.subjectName); - } - }; - } -} diff --git a/app/src/main/java/com/nealgosalia/timetable/utils/Subject.kt b/app/src/main/java/com/nealgosalia/timetable/utils/Subject.kt new file mode 100644 index 0000000..a2a1b17 --- /dev/null +++ b/app/src/main/java/com/nealgosalia/timetable/utils/Subject.kt @@ -0,0 +1,26 @@ +package com.nealgosalia.timetable.utils + +import java.util.Comparator + +class Subject : Comparable { + + var subjectName: String? = null + var attendedLectures: Int = 0 + var totalLectures: Int = 0 + + @Override + fun compareTo(o: Subject): Int { + return Comparators.NAME.compare(this, o) + } + + + object Comparators { + + var NAME: Comparator = object : Comparator() { + @Override + fun compare(o1: Subject, o2: Subject): Int { + return o1.subjectName!!.compareTo(o2.subjectName) + } + } + } +} diff --git a/build.gradle b/build.gradle index 0a74891..f6f90b2 100644 --- a/build.gradle +++ b/build.gradle @@ -3,9 +3,10 @@ buildscript { repositories { jcenter() + google() } dependencies { - classpath 'com.android.tools.build:gradle:3.0.0-beta2' + classpath 'com.android.tools.build:gradle:3.2.0' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files @@ -15,6 +16,7 @@ buildscript { allprojects { repositories { jcenter() + google() } } diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000..f6b961f Binary files /dev/null and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..9a4163a --- /dev/null +++ b/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index 9d82f78..cccdd3d 100755 --- a/gradlew +++ b/gradlew @@ -1,4 +1,4 @@ -#!/usr/bin/env bash +#!/usr/bin/env sh ############################################################################## ## @@ -6,20 +6,38 @@ ## ############################################################################## -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS="" +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null APP_NAME="Gradle" APP_BASE_NAME=`basename "$0"` +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS="" + # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD="maximum" -warn ( ) { +warn () { echo "$*" } -die ( ) { +die () { echo echo "$*" echo @@ -30,6 +48,7 @@ die ( ) { cygwin=false msys=false darwin=false +nonstop=false case "`uname`" in CYGWIN* ) cygwin=true @@ -40,26 +59,11 @@ case "`uname`" in MINGW* ) msys=true ;; + NONSTOP* ) + nonstop=true + ;; esac -# Attempt to set APP_HOME -# Resolve links: $0 may be a link -PRG="$0" -# Need this for relative symlinks. -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi -done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >/dev/null -APP_HOME="`pwd -P`" -cd "$SAVED" >/dev/null - CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar # Determine the Java command to use to start the JVM. @@ -85,7 +89,7 @@ location of your Java installation." fi # Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then MAX_FD_LIMIT=`ulimit -H -n` if [ $? -eq 0 ] ; then if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then @@ -150,11 +154,19 @@ if $cygwin ; then esac fi -# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules -function splitJvmOpts() { - JVM_OPTS=("$@") +# Escape application args +save () { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " } -eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS -JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" +APP_ARGS=$(save "$@") + +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" + +# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong +if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then + cd "$(dirname "$0")" +fi -exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" +exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat index aec9973..e95643d 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -8,14 +8,14 @@ @rem Set local scope for the variables with windows NT shell if "%OS%"=="Windows_NT" setlocal -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS= - set DIRNAME=%~dp0 if "%DIRNAME%" == "" set DIRNAME=. set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS= + @rem Find java.exe if defined JAVA_HOME goto findJavaFromJavaHome @@ -46,10 +46,9 @@ echo location of your Java installation. goto fail :init -@rem Get command-line arguments, handling Windowz variants +@rem Get command-line arguments, handling Windows variants if not "%OS%" == "Windows_NT" goto win9xME_args -if "%@eval[2+2]" == "4" goto 4NT_args :win9xME_args @rem Slurp the command line arguments. @@ -60,11 +59,6 @@ set _SKIP=2 if "x%~1" == "x" goto execute set CMD_LINE_ARGS=%* -goto execute - -:4NT_args -@rem Get arguments from the 4NT Shell from JP Software -set CMD_LINE_ARGS=%$ :execute @rem Setup the command line