diff --git a/app/build.gradle b/app/build.gradle index c70e914..60b4f84 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -45,6 +45,10 @@ } } +kapt { + generateStubs = true +} + dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) androidTestImplementation('com.android.support.test.espresso:espresso-core:2.2.2', { @@ -85,7 +89,8 @@ // Kotlin DataBinding kapt "com.android.databinding:compiler:2.5.0-alpha-preview-02" - // Kuromoji - compile "com.atilika.kuromoji:kuromoji-ipadic:0.9.0" + // CalenderView + compile 'com.github.sundeepk:compact-calendar-view:2.0.2.1' + compile 'com.prolificinteractive:material-calendarview:1.4.3' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d99f369..453d3f0 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -8,20 +8,22 @@ android:name=".App" android:allowBackup="true" android:icon="@mipmap/ic_launcher" - android:label="@string/app_name" + android:label="LoRie" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> - + + + + - \ No newline at end of file diff --git a/app/src/main/assets/cookie.ttf b/app/src/main/assets/cookie.ttf new file mode 100755 index 0000000..59d62df --- /dev/null +++ b/app/src/main/assets/cookie.ttf Binary files differ diff --git a/app/src/main/kotlin/org/ntlab/leftoverrecipe/Constant.kt b/app/src/main/kotlin/org/ntlab/leftoverrecipe/Constant.kt new file mode 100644 index 0000000..8cfcdf4 --- /dev/null +++ b/app/src/main/kotlin/org/ntlab/leftoverrecipe/Constant.kt @@ -0,0 +1,9 @@ +package org.ntlab.leftoverrecipe + +/** + * Created by matsumoto_k on 2017/07/09. + */ +class Constant { + companion object { + } +} \ No newline at end of file diff --git a/app/src/main/kotlin/org/ntlab/leftoverrecipe/Mapping.kt b/app/src/main/kotlin/org/ntlab/leftoverrecipe/Mapping.kt new file mode 100644 index 0000000..a650b07 --- /dev/null +++ b/app/src/main/kotlin/org/ntlab/leftoverrecipe/Mapping.kt @@ -0,0 +1,17 @@ +package org.ntlab.leftoverrecipe + +/** + * Created by matsumoto_k on 2017/07/09. + */ +class Mapping { + companion object { + fun getRecipeTimeZone(num: Int): String { + when (num) { + 0 -> return "朝" + 1 -> return "昼" + 2 -> return "晩" + } + return "" + } + } +} \ No newline at end of file diff --git a/app/src/main/kotlin/org/ntlab/leftoverrecipe/activity/DetailDialyActivity.kt b/app/src/main/kotlin/org/ntlab/leftoverrecipe/activity/DetailDialyActivity.kt new file mode 100644 index 0000000..5a3bc69 --- /dev/null +++ b/app/src/main/kotlin/org/ntlab/leftoverrecipe/activity/DetailDialyActivity.kt @@ -0,0 +1,47 @@ +package org.ntlab.leftoverrecipe.activity + +import android.os.Bundle +import android.support.v7.app.AppCompatActivity +import kotlinx.android.synthetic.main.activity_dialy_detail.* +import org.ntlab.leftoverrecipe.Mapping +import org.ntlab.leftoverrecipe.R +import org.ntlab.leftoverrecipe.model.db.RecipeDataRealm +import org.ntlab.leftoverrecipe.util.BitmapUtil +import java.text.SimpleDateFormat +import java.util.* + +/** + * Created by matsumoto_k on 2017/07/10. + */ +class DetailDialyActivity : AppCompatActivity() { + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_dialy_detail) + + val long = intent.getLongExtra("date", 0) + val cal = Calendar.getInstance() + cal.timeInMillis = long + + val recipeData = RecipeDataRealm.findWithDate(cal.time) + + val sdf = SimpleDateFormat("yyyy-MM-dd") + if (recipeData.image != null) { + detailDialyImageView.setImageBitmap(BitmapUtil.createBitmap(recipeData.image!!)) + } else { + detailDialyImageView.setImageResource(R.drawable.nonimage) + } + detailDialyRecipeName.text = recipeData.recipeName + detailDialyComment.text = recipeData.comment + + supportActionBar?.setDisplayHomeAsUpEnabled(true) + supportActionBar?.setDisplayShowHomeEnabled(true) + supportActionBar?.title = "${sdf.format(recipeData.date.time).toString()} : ${Mapping.getRecipeTimeZone(recipeData.makeTimeZone)}ご飯" + + } + + override fun onSupportNavigateUp(): Boolean { + overridePendingTransition(0, 0); + finish() + return super.onSupportNavigateUp() + } +} \ No newline at end of file diff --git a/app/src/main/kotlin/org/ntlab/leftoverrecipe/activity/DetailRecipeActivity.kt b/app/src/main/kotlin/org/ntlab/leftoverrecipe/activity/DetailRecipeActivity.kt index 05abda1..f890106 100644 --- a/app/src/main/kotlin/org/ntlab/leftoverrecipe/activity/DetailRecipeActivity.kt +++ b/app/src/main/kotlin/org/ntlab/leftoverrecipe/activity/DetailRecipeActivity.kt @@ -2,7 +2,7 @@ import android.databinding.DataBindingUtil import android.os.Bundle -import android.support.v4.app.FragmentActivity +import android.support.v7.app.AppCompatActivity import com.bumptech.glide.Glide import kotlinx.android.synthetic.main.activity_detail_recipe.* import org.ntlab.leftoverrecipe.R @@ -10,7 +10,7 @@ import org.ntlab.leftoverrecipe.databinding.ActivityDetailRecipeBinding import org.ntlab.leftoverrecipe.viewmodel.DetailRecipeViewModel -class DetailRecipeActivity : FragmentActivity() { +class DetailRecipeActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -25,5 +25,15 @@ Glide.with(this).load("").into(hogeImage) + + supportActionBar?.setDisplayHomeAsUpEnabled(true) + supportActionBar?.setDisplayShowHomeEnabled(true) + supportActionBar?.title = "" + } + + override fun onSupportNavigateUp(): Boolean { + finish() + overridePendingTransition(0, 0); + return super.onSupportNavigateUp() } } diff --git a/app/src/main/kotlin/org/ntlab/leftoverrecipe/activity/DialyActivity.kt b/app/src/main/kotlin/org/ntlab/leftoverrecipe/activity/DialyActivity.kt index 4cf3f59..8bc7058 100644 --- a/app/src/main/kotlin/org/ntlab/leftoverrecipe/activity/DialyActivity.kt +++ b/app/src/main/kotlin/org/ntlab/leftoverrecipe/activity/DialyActivity.kt @@ -1,18 +1,31 @@ package org.ntlab.leftoverrecipe.activity -import android.app.Activity +import android.content.Intent import android.databinding.DataBindingUtil +import android.graphics.Color import android.os.Bundle +import android.support.v7.app.AppCompatActivity +import android.support.v7.widget.GridLayoutManager +import com.prolificinteractive.materialcalendarview.CalendarDay +import kotlinx.android.synthetic.main.activity_dialy.* import org.ntlab.leftoverrecipe.R +import org.ntlab.leftoverrecipe.adapter.GridListAdapter +import org.ntlab.leftoverrecipe.contract.MenuViewContract import org.ntlab.leftoverrecipe.databinding.ActivityDialyBinding +import org.ntlab.leftoverrecipe.model.db.RecipeData +import org.ntlab.leftoverrecipe.model.db.RecipeDataRealm +import org.ntlab.leftoverrecipe.util.decorators.EventDecorator import org.ntlab.leftoverrecipe.viewmodel.DialyViewModel +import java.util.* + /** * Created by matsumoto_k on 2017/07/09. */ -class DialyActivity : Activity() { +class DialyActivity : AppCompatActivity(), MenuViewContract { var viewModel: DialyViewModel? = null + var adapter: GridListAdapter? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -20,5 +33,50 @@ val binding = DataBindingUtil.setContentView(this, R.layout.activity_dialy) viewModel = DialyViewModel(this) binding.viewModel = viewModel + + val hoge = RecipeDataRealm.findAll() + val list: ArrayList = ArrayList() + for (data in hoge) { + val day = CalendarDay.from(data.date) + list.add(day) + } + + dialyCalendar.addDecorator(EventDecorator(Color.RED, list)) + + dialyCalendar.setOnDateChangedListener { materialCalendarView, calendarDay, b -> + val hoge = RecipeDataRealm.findBetween(calendarDay.date.time) + + adapter?.setItemAndRefresh(hoge) + } + + dialyCalendar.setHeaderTextAppearance(R.style.TextAppearance_AppCompat_Large); + dialyCalendar.setDateTextAppearance(R.style.TextAppearance_AppCompat_Medium); + dialyCalendar.setWeekDayTextAppearance(R.style.TextAppearance_AppCompat_Medium); + + dialyRecyclerView.layoutManager = GridLayoutManager(this, 3) + adapter = GridListAdapter(this, this as MenuViewContract) + dialyRecyclerView.adapter = adapter + + supportActionBar?.setDisplayHomeAsUpEnabled(true) + supportActionBar?.title = "" + + } + + override fun onSupportNavigateUp(): Boolean { + overridePendingTransition(0, 0); + finish() + return super.onSupportNavigateUp() + } + + override fun startSearchActivity() { + } + + override fun startCalendarActivity() { + } + + override fun startDetailActivity(recipeData: RecipeData) { + val intent = Intent(this, DetailDialyActivity::class.java) + intent.putExtra("date", recipeData.date.time) + startActivity(intent) } } \ No newline at end of file diff --git a/app/src/main/kotlin/org/ntlab/leftoverrecipe/activity/MenuActivity.kt b/app/src/main/kotlin/org/ntlab/leftoverrecipe/activity/MenuActivity.kt index d02560a..2503705 100644 --- a/app/src/main/kotlin/org/ntlab/leftoverrecipe/activity/MenuActivity.kt +++ b/app/src/main/kotlin/org/ntlab/leftoverrecipe/activity/MenuActivity.kt @@ -3,10 +3,17 @@ import android.app.Activity import android.content.Intent import android.databinding.DataBindingUtil +import android.graphics.Color import android.os.Bundle +import android.support.v7.widget.GridLayoutManager +import android.view.MenuItem +import kotlinx.android.synthetic.main.activity_menu.* import org.ntlab.leftoverrecipe.R +import org.ntlab.leftoverrecipe.adapter.GridListAdapter import org.ntlab.leftoverrecipe.contract.MenuViewContract import org.ntlab.leftoverrecipe.databinding.ActivityMenuBinding +import org.ntlab.leftoverrecipe.model.db.RecipeData +import org.ntlab.leftoverrecipe.model.db.RecipeDataRealm import org.ntlab.leftoverrecipe.viewmodel.MenuViewModel /** @@ -15,22 +22,57 @@ class MenuActivity : Activity(), MenuViewContract { var viewModel: MenuViewModel? = null + var adapter: GridListAdapter? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val binding = DataBindingUtil.setContentView(this, R.layout.activity_menu) - viewModel = MenuViewModel(this, this as MenuViewContract) + setUpViews() + viewModel = MenuViewModel(this, this as MenuViewContract, adapter!!) binding.viewModel = viewModel + + if (RecipeDataRealm.dayCount() == 0) { + println("dummyDataCreate") + RecipeDataRealm.insertDummy(this) + } + + customToolbar.inflateMenu(R.menu.menu_main) + customToolbar.title = "LoRie" + customToolbar.setTitleTextColor(Color.WHITE) + + customToolbar.setOnMenuItemClickListener( + object : android.support.v7.widget.Toolbar.OnMenuItemClickListener { + override fun onMenuItemClick(item: MenuItem?): Boolean { + val intent = Intent(this@MenuActivity, DialyActivity::class.java) + startActivity(intent) + overridePendingTransition(0, 0); + return false + } + } + ) + } + + fun setUpViews() { + menuRecyclerView.layoutManager = GridLayoutManager(this, 3) + adapter = GridListAdapter(this, this as MenuViewContract) + menuRecyclerView.adapter = adapter } override fun startSearchActivity() { val intent = Intent(this@MenuActivity, SearchActivity::class.java) startActivity(intent) + overridePendingTransition(0, 0); } - override fun startDialyActivity() { - val intent = Intent(this@MenuActivity, DialyActivity::class.java) + override fun startCalendarActivity() { + + } + + override fun startDetailActivity(recipeData: RecipeData) { + val intent = Intent(this@MenuActivity, DetailDialyActivity::class.java) + intent.putExtra("date", recipeData.date.time) startActivity(intent) + overridePendingTransition(0, 0); } } \ No newline at end of file diff --git a/app/src/main/kotlin/org/ntlab/leftoverrecipe/activity/SearchActivity.kt b/app/src/main/kotlin/org/ntlab/leftoverrecipe/activity/SearchActivity.kt index d090827..3f36182 100644 --- a/app/src/main/kotlin/org/ntlab/leftoverrecipe/activity/SearchActivity.kt +++ b/app/src/main/kotlin/org/ntlab/leftoverrecipe/activity/SearchActivity.kt @@ -1,10 +1,11 @@ package org.ntlab.leftoverrecipe.activity -import android.app.Activity import android.content.Intent import android.databinding.DataBindingUtil import android.os.Bundle +import android.support.v7.app.AppCompatActivity import android.support.v7.widget.LinearLayoutManager +import android.view.View import kotlinx.android.synthetic.main.activity_search.* import org.ntlab.leftoverrecipe.R import org.ntlab.leftoverrecipe.adapter.SearchListAdapter @@ -13,19 +14,29 @@ import org.ntlab.leftoverrecipe.databinding.ActivitySearchBinding import org.ntlab.leftoverrecipe.viewmodel.SearchViewModel -class SearchActivity : Activity(), SearchListViewContract { +class SearchActivity : AppCompatActivity(), SearchListViewContract { var adapter: SearchListAdapter? = null + var viewModel: SearchViewModel? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_search) val binding = DataBindingUtil.setContentView(this, R.layout.activity_search) - val viewModel = SearchViewModel(this, this as SearchListViewContract) + viewModel = SearchViewModel(this, this as SearchListViewContract) binding.viewModel = viewModel setupViews() + + supportActionBar?.setDisplayHomeAsUpEnabled(true) + supportActionBar?.title = "" + } + + override fun onSupportNavigateUp(): Boolean { + finish() + overridePendingTransition(0, 0); + return super.onNavigateUp() } fun setupViews() { @@ -34,6 +45,10 @@ searchListView.adapter = adapter } + override fun onPostResume() { + super.onPostResume() + } + override fun showRecipe(response: RecipeApiResponse) { adapter?.setItemAndRefresh(response.result!!) } @@ -43,5 +58,6 @@ val intent = Intent(this@SearchActivity, DetailRecipeActivity::class.java) intent.putExtra("recipeData", recipeData) startActivity(intent) + overridePendingTransition(0, 0); } } diff --git a/app/src/main/kotlin/org/ntlab/leftoverrecipe/activity/SplashActivity.kt b/app/src/main/kotlin/org/ntlab/leftoverrecipe/activity/SplashActivity.kt new file mode 100644 index 0000000..ca97ef2 --- /dev/null +++ b/app/src/main/kotlin/org/ntlab/leftoverrecipe/activity/SplashActivity.kt @@ -0,0 +1,46 @@ +package org.ntlab.leftoverrecipe.activity + +import android.app.Activity +import android.content.Intent +import android.graphics.Typeface +import android.os.Bundle +import android.view.View +import android.view.animation.AnimationUtils +import kotlinx.android.synthetic.main.splasy_activity.* +import org.ntlab.leftoverrecipe.R + +/** + * Created by matsumoto_k on 2017/07/10. + */ +class SplashActivity : Activity() { + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.splasy_activity) + + Thread(object : Runnable { + override fun run() { + try { + Thread.sleep(1000) + } catch (e: Exception) { + + } + runOnUiThread { + splashTitleLogo.setTypeface(Typeface.createFromAsset(assets, "cookie.ttf")) + splashTitleLogo.visibility = View.VISIBLE + splashTitleLogo.startAnimation(AnimationUtils.loadAnimation(this@SplashActivity, R.anim.splash)) + } + + try { + Thread.sleep(1500) + } catch (e: Exception) { + + } + + val intent = Intent(this@SplashActivity,MenuActivity::class.java) + startActivity(intent) + finish() + } + }).start() + } +} \ No newline at end of file diff --git a/app/src/main/kotlin/org/ntlab/leftoverrecipe/adapter/DialyListAdapter.kt b/app/src/main/kotlin/org/ntlab/leftoverrecipe/adapter/DialyListAdapter.kt new file mode 100644 index 0000000..ee7b113 --- /dev/null +++ b/app/src/main/kotlin/org/ntlab/leftoverrecipe/adapter/DialyListAdapter.kt @@ -0,0 +1,61 @@ +package org.ntlab.leftoverrecipe.adapter + +import android.app.Activity +import android.databinding.DataBindingUtil +import android.support.v7.widget.RecyclerView +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import kotlinx.android.synthetic.main.search_list_item.view.* +import org.ntlab.leftoverrecipe.R +import org.ntlab.leftoverrecipe.databinding.DialyListItemBinding +import org.ntlab.leftoverrecipe.model.db.RecipeData +import org.ntlab.leftoverrecipe.viewmodel.DialyListItemViewModel + +/** + * Created by matsumoto_k on 2017/07/09. + */ +class DialyListAdapter(var context: Activity/*, var view: SearchListViewContract*/) : RecyclerView.Adapter() { + + var items: ArrayList? = null + + inner class ViewHolder(itemView: View, viewModel: DialyListItemViewModel) : RecyclerView.ViewHolder(itemView) { + var viewModel: DialyListItemViewModel? = null + var imageVieww = itemView?.rootView?.listImageView + + init { + this.viewModel = viewModel + } + + fun loadItem(item: RecipeData) { + viewModel?.loadItem(item) + } + } + + fun setItemAndRefresh(items: ArrayList) { + this.items = items + notifyDataSetChanged() + } + + fun getItemAt(position: Int): RecipeData? { + return items?.get(position) + } + + override fun onBindViewHolder(holder: ViewHolder?, position: Int) { + val item = getItemAt(position) + holder?.loadItem(item!!) + } + + override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): ViewHolder { + val binding = DataBindingUtil.inflate(LayoutInflater.from(context), R.layout.dialy_list_item, parent, false) + binding.viewModel = DialyListItemViewModel(context) + return ViewHolder(binding.root, binding.viewModel!!) + } + + override fun getItemCount(): Int { + if (items == null) { + return 0 + } + return items?.size!! + } +} \ No newline at end of file diff --git a/app/src/main/kotlin/org/ntlab/leftoverrecipe/adapter/GridListAdapter.kt b/app/src/main/kotlin/org/ntlab/leftoverrecipe/adapter/GridListAdapter.kt new file mode 100644 index 0000000..89b71c7 --- /dev/null +++ b/app/src/main/kotlin/org/ntlab/leftoverrecipe/adapter/GridListAdapter.kt @@ -0,0 +1,69 @@ +package org.ntlab.leftoverrecipe.adapter + +import android.app.Activity +import android.databinding.DataBindingUtil +import android.support.v7.widget.RecyclerView +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import org.ntlab.leftoverrecipe.R +import org.ntlab.leftoverrecipe.contract.MenuViewContract +import org.ntlab.leftoverrecipe.databinding.MenuListItemBinding +import org.ntlab.leftoverrecipe.model.db.RecipeData +import org.ntlab.leftoverrecipe.util.BitmapUtil +import org.ntlab.leftoverrecipe.viewmodel.MenuListItemViewModel + +/** + * Created by matsumoto_k on 2017/07/10. + */ +class GridListAdapter(var context: Activity, var view: MenuViewContract?) : RecyclerView.Adapter() { + + var items: ArrayList? = null + + inner class ViewHolder(itemView: View, viewModel: MenuListItemViewModel) : RecyclerView.ViewHolder(itemView) { + var viewModel: MenuListItemViewModel? = null + var imageView: ImageView? = null + + init { + this.viewModel = viewModel + imageView = itemView.findViewById(R.id.listRecipeImage) as ImageView + } + + fun loadItem(item: RecipeData) { + if (item.image != null) { + imageView?.setImageBitmap(BitmapUtil.createBitmap(item.image!!)) + }else{ + imageView?.setImageResource(R.drawable.list_no_image) + } + viewModel?.loadItem(item) + } + } + + fun setItemAndRefresh(items: ArrayList) { + this.items = items + notifyDataSetChanged() + } + + fun getItemAt(position: Int): RecipeData? { + return items?.get(position) + } + + override fun onBindViewHolder(holder: ViewHolder?, position: Int) { + val item = getItemAt(position) + holder?.loadItem(item!!) + } + + override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): ViewHolder { + val binding = DataBindingUtil.inflate(LayoutInflater.from(context), R.layout.menu_list_item, parent, false) + binding.viewModel = MenuListItemViewModel(context, view) + return ViewHolder(binding.root, binding.viewModel!!) + } + + override fun getItemCount(): Int { + if (items == null) { + return 0 + } + return items?.size!! + } +} \ No newline at end of file diff --git a/app/src/main/kotlin/org/ntlab/leftoverrecipe/adapter/SearchListAdapter.kt b/app/src/main/kotlin/org/ntlab/leftoverrecipe/adapter/SearchListAdapter.kt index 78c5414..12b8002 100644 --- a/app/src/main/kotlin/org/ntlab/leftoverrecipe/adapter/SearchListAdapter.kt +++ b/app/src/main/kotlin/org/ntlab/leftoverrecipe/adapter/SearchListAdapter.kt @@ -34,7 +34,6 @@ } fun setItemAndRefresh(items: ArrayList) { - println("きたよ") this.items = items notifyDataSetChanged() } diff --git a/app/src/main/kotlin/org/ntlab/leftoverrecipe/contract/MenuViewContract.kt b/app/src/main/kotlin/org/ntlab/leftoverrecipe/contract/MenuViewContract.kt index cd70da5..0539cc3 100644 --- a/app/src/main/kotlin/org/ntlab/leftoverrecipe/contract/MenuViewContract.kt +++ b/app/src/main/kotlin/org/ntlab/leftoverrecipe/contract/MenuViewContract.kt @@ -1,10 +1,13 @@ package org.ntlab.leftoverrecipe.contract +import org.ntlab.leftoverrecipe.model.db.RecipeData + /** * Created by matsumoto_k on 2017/07/09. */ interface MenuViewContract { fun startSearchActivity() - fun startDialyActivity() + fun startCalendarActivity() + fun startDetailActivity(recipeData: RecipeData) } \ No newline at end of file diff --git a/app/src/main/kotlin/org/ntlab/leftoverrecipe/fragment/RegistDialogFragment.kt b/app/src/main/kotlin/org/ntlab/leftoverrecipe/fragment/RegistDialogFragment.kt index 7028bf0..a91b0a8 100644 --- a/app/src/main/kotlin/org/ntlab/leftoverrecipe/fragment/RegistDialogFragment.kt +++ b/app/src/main/kotlin/org/ntlab/leftoverrecipe/fragment/RegistDialogFragment.kt @@ -20,9 +20,10 @@ /** * Created by matsumoto_k on 2017/05/20. */ -class RegistDialogFragment(var recipeData: RecipeApiResponse.RecipeData) : DialogFragment(), RegistDialogViewContract { +class RegistDialogFragment(var recipeData: RecipeApiResponse.RecipeData?) : DialogFragment(), RegistDialogViewContract { var bitmap: Bitmap? = null + var viewModel: RegistDialogViewModel? = null companion object { val RESULT_CAMERA = 1 @@ -34,7 +35,8 @@ val binding = DataBindingUtil.inflate(LayoutInflater.from(dialog.context), R.layout.fragment_regist_dialog, null, false) dialog.setContentView(binding.root) dialog.window.setLayout(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.MATCH_PARENT) - val viewModel = RegistDialogViewModel(activity, dialog, recipeData, this as RegistDialogViewContract) + this.viewModel = RegistDialogViewModel(activity, dialog, recipeData, this as RegistDialogViewContract) + val viewModel = this.viewModel binding.viewModel = viewModel return dialog } @@ -57,7 +59,7 @@ imageView.visibility = View.VISIBLE this.bitmap = bitmap - imageView.setImageBitmap(bitmap) + this.viewModel?.bitmap = bitmap } } } diff --git a/app/src/main/kotlin/org/ntlab/leftoverrecipe/model/db/RecipeData.kt b/app/src/main/kotlin/org/ntlab/leftoverrecipe/model/db/RecipeData.kt index 40a4834..677ec02 100644 --- a/app/src/main/kotlin/org/ntlab/leftoverrecipe/model/db/RecipeData.kt +++ b/app/src/main/kotlin/org/ntlab/leftoverrecipe/model/db/RecipeData.kt @@ -1,6 +1,7 @@ package org.ntlab.leftoverrecipe.model.db import io.realm.RealmObject +import java.io.Serializable import java.util.* /** diff --git a/app/src/main/kotlin/org/ntlab/leftoverrecipe/model/db/RecipeDataRealm.kt b/app/src/main/kotlin/org/ntlab/leftoverrecipe/model/db/RecipeDataRealm.kt index b188b81..97d1833 100644 --- a/app/src/main/kotlin/org/ntlab/leftoverrecipe/model/db/RecipeDataRealm.kt +++ b/app/src/main/kotlin/org/ntlab/leftoverrecipe/model/db/RecipeDataRealm.kt @@ -1,6 +1,12 @@ package org.ntlab.leftoverrecipe.model.db +import android.app.Activity import io.realm.Realm +import io.realm.Sort +import java.text.SimpleDateFormat +import java.util.* +import kotlin.collections.ArrayList +import kotlin.collections.HashMap /** * Created by matsumoto_k on 2017/07/06. @@ -17,4 +23,82 @@ } } } + + fun insertDummy(activity: Activity) { + + + Thread(object : Runnable { + override fun run() { + mRealm = Realm.getInstance(config) + mRealm.use { + realm -> + realm?.executeTransaction { + val dateStart = Calendar.getInstance() + dateStart.set(2017, 5, 1) + + // 終了日 + val dateEnd = Calendar.getInstance() + + // 期間日数 + val dateDiff = (dateEnd.timeInMillis - dateStart.timeInMillis) / (1000 * 60 * 60 * 24) + for (i in 0..30) { + try { + Thread.sleep(1000) + } catch (e: Exception) { + + } + // ランダムな年月日の生成 + val dateRandom = Calendar.getInstance() + dateRandom.add(Calendar.DATE, -Random().nextInt(dateDiff.toInt())) + val dummyData = RecipeData() + dummyData.date = dateRandom.time + dummyData.makeTimeZone = Random().nextInt(3) + dummyData.comment = "コメント(${i})" + dummyData.recipeName = "料理名(${i})" + realm.copyToRealm(dummyData) + } + } + } + // realm.copyToRealm(recipeData) + } + }).start() + } + + fun findAll(): ArrayList { + mRealm = Realm.getInstance(config) + val results = ArrayList(mRealm?.where(RecipeData::class.java)?.findAll()?.sort("date", Sort.DESCENDING)) + return results + } + + fun findBetween(startTime: Long): ArrayList { + mRealm = Realm.getInstance(config) + val startDate = Calendar.getInstance() + startDate.timeInMillis = startTime + val endDate = Calendar.getInstance() + endDate.timeInMillis = (startTime + 86400000L) + return ArrayList(mRealm?.where(RecipeData::class.java)?.between("date", startDate.time, endDate.time)?.findAll()?.sort("makeTimeZone")) + } + + fun findWithDate(date: Date): RecipeData { + mRealm = Realm.getInstance(config) + return mRealm?.where(RecipeData::class.java)?.equalTo("date", date)?.findFirst()!! + } + + fun dayCount(): Int { + mRealm = Realm.getInstance(config) + val results = ArrayList(mRealm?.where(RecipeData::class.java)?.findAll()) + val count = HashMap() + for (data in results) { + val tmpDate = SimpleDateFormat("yyyy/MM/dd 00:00:00"); + count.put(tmpDate.format(data.date), 0) + } + return count.size + } + + fun recipeCount(): Int { + mRealm = Realm.getInstance(config) + val results = ArrayList(mRealm?.where(RecipeData::class.java)?.findAll()) + return results.size + } + } \ No newline at end of file diff --git a/app/src/main/kotlin/org/ntlab/leftoverrecipe/util/decorators/EventDecorator.java b/app/src/main/kotlin/org/ntlab/leftoverrecipe/util/decorators/EventDecorator.java new file mode 100644 index 0000000..9f409ce --- /dev/null +++ b/app/src/main/kotlin/org/ntlab/leftoverrecipe/util/decorators/EventDecorator.java @@ -0,0 +1,30 @@ +package org.ntlab.leftoverrecipe.util.decorators; + +import com.prolificinteractive.materialcalendarview.CalendarDay; +import com.prolificinteractive.materialcalendarview.DayViewDecorator; +import com.prolificinteractive.materialcalendarview.DayViewFacade; +import com.prolificinteractive.materialcalendarview.spans.DotSpan; + +import java.util.Collection; +import java.util.HashSet; + +public class EventDecorator implements DayViewDecorator { + + private int color; + private HashSet dates; + + public EventDecorator(int color, Collection dates) { + this.color = color; + this.dates = new HashSet<>(dates); + } + + @Override + public boolean shouldDecorate(CalendarDay day) { + return dates.contains(day); + } + + @Override + public void decorate(DayViewFacade view) { + view.addSpan(new DotSpan(5, color)); + } +} diff --git a/app/src/main/kotlin/org/ntlab/leftoverrecipe/viewmodel/DetailRecipeViewModel.kt b/app/src/main/kotlin/org/ntlab/leftoverrecipe/viewmodel/DetailRecipeViewModel.kt index 3f55fdc..85ff903 100644 --- a/app/src/main/kotlin/org/ntlab/leftoverrecipe/viewmodel/DetailRecipeViewModel.kt +++ b/app/src/main/kotlin/org/ntlab/leftoverrecipe/viewmodel/DetailRecipeViewModel.kt @@ -4,6 +4,7 @@ import android.databinding.BaseObservable import android.databinding.BindingAdapter import android.databinding.ObservableField +import android.databinding.ObservableInt import android.view.View import android.widget.ImageView import com.bumptech.glide.Glide @@ -24,17 +25,22 @@ val stepText = ObservableField() val anyone = ObservableField() val material = ObservableField() + var descriptionText: ObservableField = ObservableField() - companion object { + val loadVisible = ObservableInt(View.VISIBLE) + val fabVisible = ObservableInt(View.GONE) + + var imageLoad = false + var recipeLoad = false + + object CustomBindingAdapter { @JvmStatic @BindingAdapter("imageUrl") fun imageUrl(imageView: ImageView, url: String) { - println(url) Glide.with(imageView.context).load(url).into(imageView) } } init { - println(recipeData.recipeTitle) recipeTitle.set(recipeData.recipeTitle) imageUrl.set(recipeData.foodImageUrl) @@ -45,17 +51,19 @@ var material = "" var count = 1 for (data in it.howto) { - stepText += "${count}.${data.step}\n" + stepText += "(${count})\n${data.step}\n\n" count++ } - for (data in it.material){ - material+= "${data.amount}\n${data.material}\n\n" + for (data in it.material) { + material += "${data.amount}\n${data.material}\n\n" } - println(stepText) this.stepText.set(stepText) this.anyone.set(it.anyone) this.material.set(material) - println("DetailApiResponseRxBus") + this.descriptionText.set(recipeData.recipeDescription) + + fabVisible.set(View.VISIBLE) + loadVisible.set(View.GONE) }.registerInBus(this) } diff --git a/app/src/main/kotlin/org/ntlab/leftoverrecipe/viewmodel/DialyListItemViewModel.kt b/app/src/main/kotlin/org/ntlab/leftoverrecipe/viewmodel/DialyListItemViewModel.kt new file mode 100644 index 0000000..90c1837 --- /dev/null +++ b/app/src/main/kotlin/org/ntlab/leftoverrecipe/viewmodel/DialyListItemViewModel.kt @@ -0,0 +1,51 @@ +package org.ntlab.leftoverrecipe.viewmodel + +import android.app.Activity +import android.databinding.BaseObservable +import android.databinding.BindingAdapter +import android.databinding.ObservableField +import android.databinding.ObservableInt +import android.graphics.Bitmap +import android.graphics.BitmapFactory +import android.view.View +import android.widget.ImageView +import org.ntlab.leftoverrecipe.Mapping +import org.ntlab.leftoverrecipe.R +import org.ntlab.leftoverrecipe.model.db.RecipeData +import org.ntlab.leftoverrecipe.util.BitmapUtil +import java.text.SimpleDateFormat + +/** + * Created by matsumoto_k on 2017/07/09. + */ +class DialyListItemViewModel(var activity: Activity) : BaseObservable() { + + val recipeTitle = ObservableField() + val date = ObservableField() + val timeZone = ObservableField() + val bitmap = ObservableField() + val comment = ObservableField() + val noImageVisible = ObservableInt(View.GONE) + + companion object { + @JvmStatic @BindingAdapter("android:src") + fun setImageView(view: ImageView, bitmap: Bitmap) { + view.setImageBitmap(bitmap) + } + } + + fun loadItem(item: RecipeData) { + recipeTitle.set("料理名 : ${item.recipeName}") + timeZone.set("時間帯 : ${Mapping.getRecipeTimeZone(item.makeTimeZone)}") + val sdf = SimpleDateFormat("yyyy-MM-dd") + date.set(sdf.format(item.date.time).toString()) + comment.set("一言コメント\n${item.comment}") + if (item.image != null) { + noImageVisible.set(View.VISIBLE) + this.bitmap.set(BitmapUtil.createBitmap(item.image!!)) + } else { + noImageVisible.set(View.GONE) + this.bitmap.set(BitmapFactory.decodeResource(activity.resources, R.drawable.nonimage)) + } + } +} \ No newline at end of file diff --git a/app/src/main/kotlin/org/ntlab/leftoverrecipe/viewmodel/ListItemViewModel.kt b/app/src/main/kotlin/org/ntlab/leftoverrecipe/viewmodel/ListItemViewModel.kt index ab9a1c1..ab51330 100644 --- a/app/src/main/kotlin/org/ntlab/leftoverrecipe/viewmodel/ListItemViewModel.kt +++ b/app/src/main/kotlin/org/ntlab/leftoverrecipe/viewmodel/ListItemViewModel.kt @@ -5,7 +5,6 @@ import android.view.View import android.widget.ImageView import com.bumptech.glide.Glide -import org.ntlab.leftoverrecipe.api.recipe.DetailApiResponse import org.ntlab.leftoverrecipe.api.recipe.RecipeApiResponse import org.ntlab.leftoverrecipe.contract.SearchListViewContract diff --git a/app/src/main/kotlin/org/ntlab/leftoverrecipe/viewmodel/MenuListItemViewModel.kt b/app/src/main/kotlin/org/ntlab/leftoverrecipe/viewmodel/MenuListItemViewModel.kt new file mode 100644 index 0000000..40c5095 --- /dev/null +++ b/app/src/main/kotlin/org/ntlab/leftoverrecipe/viewmodel/MenuListItemViewModel.kt @@ -0,0 +1,37 @@ +package org.ntlab.leftoverrecipe.viewmodel + +import android.app.Activity +import android.databinding.BindingAdapter +import android.databinding.ObservableField +import android.databinding.ObservableInt +import android.graphics.Bitmap +import android.view.View +import android.widget.ImageView +import org.ntlab.leftoverrecipe.contract.MenuViewContract +import org.ntlab.leftoverrecipe.model.db.RecipeData +import org.ntlab.leftoverrecipe.util.BitmapUtil +import java.text.SimpleDateFormat + +/** + * Created by matsumoto_k on 2017/07/10. + */ +class MenuListItemViewModel(var context: Activity, var view: MenuViewContract?) { + + var load = false + val date = ObservableField() + val recipeName = ObservableField() + var recipeData: RecipeData? = null + + + fun loadItem(item: RecipeData) { + load = true + this.recipeData = item + val sdf = SimpleDateFormat("yyyy-MM-dd") + date.set(sdf.format(item.date.time).toString()) + recipeName.set(item.recipeName) + } + + fun onClick(view: View) { + this.view?.startDetailActivity(recipeData!!) + } +} \ No newline at end of file diff --git a/app/src/main/kotlin/org/ntlab/leftoverrecipe/viewmodel/MenuViewModel.kt b/app/src/main/kotlin/org/ntlab/leftoverrecipe/viewmodel/MenuViewModel.kt index d3a508d..a73e10c 100644 --- a/app/src/main/kotlin/org/ntlab/leftoverrecipe/viewmodel/MenuViewModel.kt +++ b/app/src/main/kotlin/org/ntlab/leftoverrecipe/viewmodel/MenuViewModel.kt @@ -1,21 +1,114 @@ package org.ntlab.leftoverrecipe.viewmodel import android.app.Activity +import android.databinding.BindingAdapter +import android.databinding.ObservableField +import android.databinding.ObservableInt +import android.support.design.widget.FloatingActionButton import android.view.View +import android.view.animation.AnimationUtils +import android.widget.FrameLayout +import org.ntlab.leftoverrecipe.R +import org.ntlab.leftoverrecipe.adapter.GridListAdapter import org.ntlab.leftoverrecipe.contract.MenuViewContract +import org.ntlab.leftoverrecipe.fragment.RegistDialogFragment +import org.ntlab.leftoverrecipe.model.RxBus +import org.ntlab.leftoverrecipe.model.db.RecipeDataRealm +import org.ntlab.leftoverrecipe.model.registerInBus /** * Created by matsumoto_k on 2017/07/09. */ -class MenuViewModel(var context: Activity, var view: MenuViewContract) { +class MenuViewModel(var context: Activity, var view: MenuViewContract, var adapter: GridListAdapter) { + + + val count = ObservableInt(0) + val dayCount = ObservableField() + val recipeCount = ObservableField() + + init { + dayCount.set(RecipeDataRealm.dayCount().toString()) + recipeCount.set(RecipeDataRealm.recipeCount().toString()) + + val data = RecipeDataRealm.findAll() + adapter?.setItemAndRefresh(data) + + RxBus.observe().subscribe { + when (it) { + RequireRecipeListUpdate -> { + adapter?.items?.clear() + val data = RecipeDataRealm.findAll() + adapter?.setItemAndRefresh(data) + dayCount.set(RecipeDataRealm.dayCount().toString()) + recipeCount.set(RecipeDataRealm.recipeCount().toString()) + } + } + }.registerInBus(this) + } + + companion object { + const val RequireRecipeListUpdate = "RequireRecipeListUpdate" + + private var isOpen: Boolean = false + @JvmStatic @BindingAdapter("animation") + fun setIsBusy(view: FloatingActionButton, count: Int) { + if (count == 0) + return + if (isOpen) { + when (view.id) { + R.id.fabRecipePlus -> { + view.startAnimation(AnimationUtils.loadAnimation(view.context, R.anim.rotate_clockwise)) + } + R.id.fabSearchButton, R.id.fabAddRecipe -> { + view.visibility = View.VISIBLE + view.startAnimation(AnimationUtils.loadAnimation(view.context, R.anim.fab_open)) + } + } + + } else { + when (view.id) { + R.id.fabRecipePlus -> { + view.startAnimation(AnimationUtils.loadAnimation(view.context, R.anim.rotate_anticlockwise)) + } + R.id.fabSearchButton, R.id.fabAddRecipe -> { + view.visibility = View.GONE + view.startAnimation(AnimationUtils.loadAnimation(view.context, R.anim.fab_close)) + } + } + + } + } + + @JvmStatic @BindingAdapter("animation") + fun hoge(view: FrameLayout, count: Int) { + if (isOpen) { + view.visibility = View.VISIBLE + } else { + view.visibility = View.GONE + } + } + } fun onClickSearch(view: View) { - println("onclicksearch") this.view.startSearchActivity() + isOpen = !isOpen + count.set(count.get() + 1) } - fun onClickDialy(view: View) { - this.view.startDialyActivity() + fun onClickCalendar(view: View) { + this.view.startCalendarActivity() } + + fun onClickPlus(view: View) { + count.set(count.get() + 1) + isOpen = !isOpen + } + + fun onClickRegistRecipe(view: View) { + count.set(count.get() + 1) + isOpen = !isOpen + val dialog = RegistDialogFragment(null) + dialog.show(context.fragmentManager, "hoge") + } } \ No newline at end of file diff --git a/app/src/main/kotlin/org/ntlab/leftoverrecipe/viewmodel/RegistDialogViewModel.kt b/app/src/main/kotlin/org/ntlab/leftoverrecipe/viewmodel/RegistDialogViewModel.kt index 251e72f..6819997 100644 --- a/app/src/main/kotlin/org/ntlab/leftoverrecipe/viewmodel/RegistDialogViewModel.kt +++ b/app/src/main/kotlin/org/ntlab/leftoverrecipe/viewmodel/RegistDialogViewModel.kt @@ -11,6 +11,7 @@ import android.widget.Toast import org.ntlab.leftoverrecipe.api.recipe.RecipeApiResponse import org.ntlab.leftoverrecipe.contract.RegistDialogViewContract +import org.ntlab.leftoverrecipe.model.RxBus import org.ntlab.leftoverrecipe.model.db.RecipeData import org.ntlab.leftoverrecipe.model.db.RecipeDataRealm import org.ntlab.leftoverrecipe.util.BitmapUtil @@ -19,7 +20,7 @@ /** * Created by matsumoto_k on 2017/05/20. */ -class RegistDialogViewModel(var context: Context, var customDialog: Dialog, var recipeData: RecipeApiResponse.RecipeData, var registDialog: RegistDialogViewContract) : BaseObservable() { +class RegistDialogViewModel(var context: Context, var customDialog: Dialog, var recipeData: RecipeApiResponse.RecipeData?, var registDialog: RegistDialogViewContract) : BaseObservable() { val recipeTitle = ObservableField() @Bindable @@ -35,8 +36,7 @@ var bitmap: Bitmap? = null init { - recipeTitle.set(recipeData.recipeTitle) - println(recipeData.recipeTitle) + recipeTitle.set(recipeData?.recipeTitle) } //RegistDialogのOkButtonListener @@ -54,18 +54,19 @@ recipeData.recipeName = recipeName.get() if (comment.get() != null) recipeData.comment = comment.get() - if (bitmap != null) + if (bitmap != null) { recipeData.image = BitmapUtil.createImageByteArray(this.bitmap!!) + } if (selectedPosition.get() != null) { recipeData.makeTimeZone = selectedPosition.get() } RecipeDataRealm.insert(recipeData) - println(comment.get()) - Toast.makeText(context, "記録しました", Toast.LENGTH_SHORT).show() customDialog.dismiss() + + RxBus.send(MenuViewModel.RequireRecipeListUpdate) } //RegistDialogのCancelButtonListener diff --git a/app/src/main/kotlin/org/ntlab/leftoverrecipe/viewmodel/SearchViewModel.kt b/app/src/main/kotlin/org/ntlab/leftoverrecipe/viewmodel/SearchViewModel.kt index a4be55a..bf96353 100644 --- a/app/src/main/kotlin/org/ntlab/leftoverrecipe/viewmodel/SearchViewModel.kt +++ b/app/src/main/kotlin/org/ntlab/leftoverrecipe/viewmodel/SearchViewModel.kt @@ -1,11 +1,13 @@ package org.ntlab.leftoverrecipe.viewmodel import android.content.Context +import android.content.Context.INPUT_METHOD_SERVICE import android.databinding.BaseObservable import android.databinding.Bindable import android.databinding.ObservableField import android.databinding.ObservableInt import android.view.View +import android.view.inputmethod.InputMethodManager import android.widget.Toast import org.ntlab.leftoverrecipe.api.recipe.RecipeApiResponse import org.ntlab.leftoverrecipe.api.recipe.RecipeClient @@ -13,13 +15,12 @@ import org.ntlab.leftoverrecipe.model.RxBus import org.ntlab.leftoverrecipe.model.registerInBus import org.ntlab.leftoverrecipe.util.Category -import java.sql.DriverManager.println /** * Created by matsumoto_k on 2017/05/20. */ -class SearchViewModel(var context: Context, var hoge: SearchListViewContract) : BaseObservable() { +class SearchViewModel(var context: Context, var view: SearchListViewContract) : BaseObservable() { val progressBarVisibility = ObservableInt(View.GONE) @Bindable @@ -41,22 +42,21 @@ EndRecipeApi -> progressBarVisibility.set(View.GONE) ErrorRecipeApi -> { progressBarVisibility.set(View.GONE) - //Toast.makeText(context, "通信エラーが発生しました", Toast.LENGTH_SHORT).show() } } }.registerInBus(this) RxBus.observe().subscribe { - hoge.showRecipe(it) - for (data in it?.result!!) { - println(data.recipeTitle) - } + view.showRecipe(it) }.registerInBus(this) } //検索ボタンクリック fun onClickSearch(view: View) { loadRecipe() + val inputMethodMgr = context.getSystemService(INPUT_METHOD_SERVICE) as InputMethodManager + inputMethodMgr.hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS) + } fun loadRecipe() { diff --git a/app/src/main/res/anim/fab_close.xml b/app/src/main/res/anim/fab_close.xml new file mode 100644 index 0000000..51f68c1 --- /dev/null +++ b/app/src/main/res/anim/fab_close.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/anim/fab_open.xml b/app/src/main/res/anim/fab_open.xml new file mode 100644 index 0000000..c749223 --- /dev/null +++ b/app/src/main/res/anim/fab_open.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/anim/rotate_anticlockwise.xml b/app/src/main/res/anim/rotate_anticlockwise.xml new file mode 100644 index 0000000..a61a7db --- /dev/null +++ b/app/src/main/res/anim/rotate_anticlockwise.xml @@ -0,0 +1,13 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/anim/rotate_clockwise.xml b/app/src/main/res/anim/rotate_clockwise.xml new file mode 100644 index 0000000..cc76a61 --- /dev/null +++ b/app/src/main/res/anim/rotate_clockwise.xml @@ -0,0 +1,13 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/anim/splash.xml b/app/src/main/res/anim/splash.xml new file mode 100644 index 0000000..8f1fb19 --- /dev/null +++ b/app/src/main/res/anim/splash.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable-hdpi/ic_action_add_recipe.png b/app/src/main/res/drawable-hdpi/ic_action_add_recipe.png new file mode 100644 index 0000000..58e86a7 --- /dev/null +++ b/app/src/main/res/drawable-hdpi/ic_action_add_recipe.png Binary files differ diff --git a/app/src/main/res/drawable-hdpi/ic_action_name.png b/app/src/main/res/drawable-hdpi/ic_action_name.png new file mode 100644 index 0000000..be65564 --- /dev/null +++ b/app/src/main/res/drawable-hdpi/ic_action_name.png Binary files differ diff --git a/app/src/main/res/drawable-hdpi/ic_action_search.png b/app/src/main/res/drawable-hdpi/ic_action_search.png new file mode 100644 index 0000000..c587ed8 --- /dev/null +++ b/app/src/main/res/drawable-hdpi/ic_action_search.png Binary files differ diff --git a/app/src/main/res/drawable-mdpi/ic_action_add_recipe.png b/app/src/main/res/drawable-mdpi/ic_action_add_recipe.png new file mode 100644 index 0000000..c4c9573 --- /dev/null +++ b/app/src/main/res/drawable-mdpi/ic_action_add_recipe.png Binary files differ diff --git a/app/src/main/res/drawable-mdpi/ic_action_name.png b/app/src/main/res/drawable-mdpi/ic_action_name.png new file mode 100644 index 0000000..7f132f5 --- /dev/null +++ b/app/src/main/res/drawable-mdpi/ic_action_name.png Binary files differ diff --git a/app/src/main/res/drawable-mdpi/ic_action_search.png b/app/src/main/res/drawable-mdpi/ic_action_search.png new file mode 100644 index 0000000..62a72ba --- /dev/null +++ b/app/src/main/res/drawable-mdpi/ic_action_search.png Binary files differ diff --git a/app/src/main/res/drawable-xhdpi/ic_action_add_recipe.png b/app/src/main/res/drawable-xhdpi/ic_action_add_recipe.png new file mode 100644 index 0000000..f06f66f --- /dev/null +++ b/app/src/main/res/drawable-xhdpi/ic_action_add_recipe.png Binary files differ diff --git a/app/src/main/res/drawable-xhdpi/ic_action_name.png b/app/src/main/res/drawable-xhdpi/ic_action_name.png new file mode 100644 index 0000000..5a7c1a6 --- /dev/null +++ b/app/src/main/res/drawable-xhdpi/ic_action_name.png Binary files differ diff --git a/app/src/main/res/drawable-xhdpi/ic_action_search.png b/app/src/main/res/drawable-xhdpi/ic_action_search.png new file mode 100644 index 0000000..91402f4 --- /dev/null +++ b/app/src/main/res/drawable-xhdpi/ic_action_search.png Binary files differ diff --git a/app/src/main/res/drawable-xxhdpi/calendar.png b/app/src/main/res/drawable-xxhdpi/calendar.png new file mode 100644 index 0000000..791b8e7 --- /dev/null +++ b/app/src/main/res/drawable-xxhdpi/calendar.png Binary files differ diff --git a/app/src/main/res/drawable-xxhdpi/day_count.png b/app/src/main/res/drawable-xxhdpi/day_count.png new file mode 100644 index 0000000..e558167 --- /dev/null +++ b/app/src/main/res/drawable-xxhdpi/day_count.png Binary files differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_action_add_recipe.png b/app/src/main/res/drawable-xxhdpi/ic_action_add_recipe.png new file mode 100644 index 0000000..f218141 --- /dev/null +++ b/app/src/main/res/drawable-xxhdpi/ic_action_add_recipe.png Binary files differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_action_name.png b/app/src/main/res/drawable-xxhdpi/ic_action_name.png new file mode 100644 index 0000000..5eea2f1 --- /dev/null +++ b/app/src/main/res/drawable-xxhdpi/ic_action_name.png Binary files differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_action_search.png b/app/src/main/res/drawable-xxhdpi/ic_action_search.png new file mode 100644 index 0000000..18ae92f --- /dev/null +++ b/app/src/main/res/drawable-xxhdpi/ic_action_search.png Binary files differ diff --git a/app/src/main/res/drawable-xxhdpi/noimage.png b/app/src/main/res/drawable-xxhdpi/noimage.png new file mode 100644 index 0000000..ea094ad --- /dev/null +++ b/app/src/main/res/drawable-xxhdpi/noimage.png Binary files differ diff --git a/app/src/main/res/drawable-xxhdpi/recipe_count.png b/app/src/main/res/drawable-xxhdpi/recipe_count.png new file mode 100644 index 0000000..a2ddb00 --- /dev/null +++ b/app/src/main/res/drawable-xxhdpi/recipe_count.png Binary files differ diff --git a/app/src/main/res/drawable/list_no_image.gif b/app/src/main/res/drawable/list_no_image.gif new file mode 100644 index 0000000..de20c55 --- /dev/null +++ b/app/src/main/res/drawable/list_no_image.gif Binary files differ diff --git a/app/src/main/res/drawable/nonimage.png b/app/src/main/res/drawable/nonimage.png new file mode 100644 index 0000000..b6ffa81 --- /dev/null +++ b/app/src/main/res/drawable/nonimage.png Binary files differ diff --git a/app/src/main/res/drawable/splash.gif b/app/src/main/res/drawable/splash.gif new file mode 100644 index 0000000..f1643f3 --- /dev/null +++ b/app/src/main/res/drawable/splash.gif Binary files differ diff --git a/app/src/main/res/drawable/toolbar_calendar.png b/app/src/main/res/drawable/toolbar_calendar.png new file mode 100644 index 0000000..549f08b --- /dev/null +++ b/app/src/main/res/drawable/toolbar_calendar.png Binary files differ diff --git a/app/src/main/res/layout/activity_detail_recipe.xml b/app/src/main/res/layout/activity_detail_recipe.xml index d40badc..357195f 100644 --- a/app/src/main/res/layout/activity_detail_recipe.xml +++ b/app/src/main/res/layout/activity_detail_recipe.xml @@ -36,8 +36,9 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="8dp" + android:textColor="#005299" android:text="@{viewModel.recipeTitle}" - android:textSize="14dp" /> + android:textSize="18dp" /> + android:text="材料" + android:textSize="20dp" + android:textStyle="bold" /> + + + + @@ -63,13 +80,17 @@ + android:text="一言コメント" + android:textSize="20dp" + android:textStyle="bold" /> @@ -85,8 +106,28 @@ android:onClick="@{viewModel.onClickFab}" android:padding="5dp" android:src="@drawable/float_regist" + android:visibility="@{viewModel.fabVisible}" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" /> + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_dialy.xml b/app/src/main/res/layout/activity_dialy.xml index 020d7f2..500fa40 100644 --- a/app/src/main/res/layout/activity_dialy.xml +++ b/app/src/main/res/layout/activity_dialy.xml @@ -1,6 +1,8 @@ - + @@ -15,10 +17,38 @@ android:layout_height="match_parent" android:orientation="vertical"> - + + + + + + + + + + + + tools:layout_editor_absoluteY="0dp" + app:layout_constraintStart_toStartOf="parent" + android:layout_marginStart="8dp" + android:layout_marginEnd="8dp" + app:layout_constraintEnd_toEndOf="parent"> + + diff --git a/app/src/main/res/layout/activity_dialy_detail.xml b/app/src/main/res/layout/activity_dialy_detail.xml new file mode 100644 index 0000000..1978494 --- /dev/null +++ b/app/src/main/res/layout/activity_dialy_detail.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_menu.xml b/app/src/main/res/layout/activity_menu.xml index 428f55e..67e20af 100644 --- a/app/src/main/res/layout/activity_menu.xml +++ b/app/src/main/res/layout/activity_menu.xml @@ -15,32 +15,190 @@ android:layout_height="match_parent" android:orientation="vertical"> - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + android:backgroundTint="#cecece" + android:clickable="true" + android:elevation="6dp" + android:onClick="@{viewModel.onClickSearch}" + android:src="@drawable/ic_action_search" + android:visibility="gone" + app:borderWidth="0dp" + app:layout_constraintBottom_toTopOf="@+id/fabRecipePlus" + app:layout_constraintEnd_toEndOf="@+id/fabRecipePlus" + app:layout_constraintStart_toStartOf="@+id/fabRecipePlus" + app:pressedTranslationZ="12dp" /> + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_search.xml b/app/src/main/res/layout/activity_search.xml index ebc34a7..36ad003 100644 --- a/app/src/main/res/layout/activity_search.xml +++ b/app/src/main/res/layout/activity_search.xml @@ -51,9 +51,9 @@ android:id="@+id/searchListView" android:layout_width="0dp" android:layout_height="0dp" - android:layout_marginBottom="8dp" - android:layout_marginEnd="8dp" - android:layout_marginStart="8dp" + android:layout_marginBottom="0dp" + android:layout_marginEnd="4dp" + android:layout_marginStart="4dp" android:layout_marginTop="8dp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" @@ -71,7 +71,7 @@ android:layout_marginEnd="8dp" android:layout_marginStart="8dp" android:layout_marginTop="8dp" - android:visibility="@{viewModel.progressBarVisibility}" + android:visibility="@{viewModel.progressBarVisibility,default=gone}" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" diff --git a/app/src/main/res/layout/dialy_list_item.xml b/app/src/main/res/layout/dialy_list_item.xml new file mode 100644 index 0000000..2289029 --- /dev/null +++ b/app/src/main/res/layout/dialy_list_item.xml @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_regist_dialog.xml b/app/src/main/res/layout/fragment_regist_dialog.xml index 07b9aae..2422259 100644 --- a/app/src/main/res/layout/fragment_regist_dialog.xml +++ b/app/src/main/res/layout/fragment_regist_dialog.xml @@ -7,13 +7,14 @@ + type="org.ntlab.leftoverrecipe.viewmodel.RegistDialogViewModel" /> -