diff --git a/app/src/main/kotlin/jackall/overlaymulticounter/activity/MainActivity.kt b/app/src/main/kotlin/jackall/overlaymulticounter/activity/MainActivity.kt index 1d02b95..9495e86 100644 --- a/app/src/main/kotlin/jackall/overlaymulticounter/activity/MainActivity.kt +++ b/app/src/main/kotlin/jackall/overlaymulticounter/activity/MainActivity.kt @@ -1,18 +1,26 @@ package jackall.overlaymulticounter.activity -import android.content.Intent +import android.arch.lifecycle.ViewModelProviders +import android.databinding.DataBindingUtil import android.os.Bundle import android.support.v7.app.AppCompatActivity import jackall.overlaymulticounter.R +import jackall.overlaymulticounter.databinding.ActivityMainBinding import jackall.overlaymulticounter.db.CounterRealmHelper -import jackall.overlaymulticounter.service.MainService +import jackall.overlaymulticounter.viewmodel.MainViewModel import jackall.overlaymulticounter.vo.Counter class MainActivity : AppCompatActivity() { + lateinit var binding: ActivityMainBinding + lateinit var mainViewModel: MainViewModel + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - setContentView(R.layout.activity_main) + + binding = DataBindingUtil.setContentView(this, R.layout.activity_main) + mainViewModel = ViewModelProviders.of(this, MainViewModel.Factory()).get(MainViewModel::class.java) + binding.mainViewModel = mainViewModel if (CounterRealmHelper().getNextId() == 0) { CounterRealmHelper().insert( @@ -21,8 +29,5 @@ 0) ) } - - // TODO: RuntimePermissionの処理 - startService(Intent(this, MainService::class.java)) } } diff --git a/app/src/main/kotlin/jackall/overlaymulticounter/service/MainService.kt b/app/src/main/kotlin/jackall/overlaymulticounter/service/MainService.kt index e33e6ae..e3c885f 100644 --- a/app/src/main/kotlin/jackall/overlaymulticounter/service/MainService.kt +++ b/app/src/main/kotlin/jackall/overlaymulticounter/service/MainService.kt @@ -112,7 +112,8 @@ WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY, - WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL or + WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN or + WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL or WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH, PixelFormat.TRANSLUCENT) } else { @@ -120,7 +121,8 @@ WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.TYPE_SYSTEM_ALERT, - WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL or + WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN or + WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL or WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH, PixelFormat.TRANSLUCENT) } diff --git a/app/src/main/kotlin/jackall/overlaymulticounter/viewmodel/MainViewModel.kt b/app/src/main/kotlin/jackall/overlaymulticounter/viewmodel/MainViewModel.kt new file mode 100644 index 0000000..9d51995 --- /dev/null +++ b/app/src/main/kotlin/jackall/overlaymulticounter/viewmodel/MainViewModel.kt @@ -0,0 +1,134 @@ +package jackall.overlaymulticounter.viewmodel + +import android.app.Activity +import android.app.AlertDialog +import android.arch.lifecycle.LifecycleObserver +import android.arch.lifecycle.ViewModel +import android.arch.lifecycle.ViewModelProvider +import android.content.DialogInterface +import android.content.Intent +import android.databinding.BindingAdapter +import android.net.Uri +import android.provider.Settings +import android.support.v7.widget.DividerItemDecoration +import android.support.v7.widget.LinearLayoutManager +import android.support.v7.widget.RecyclerView +import android.view.View +import io.realm.OrderedRealmCollectionChangeListener +import io.realm.RealmResults +import jackall.overlaymulticounter.App +import jackall.overlaymulticounter.CounterAdapter +import jackall.overlaymulticounter.R +import jackall.overlaymulticounter.contract.CounterContract +import jackall.overlaymulticounter.db.CounterRealmHelper +import jackall.overlaymulticounter.service.MainService +import jackall.overlaymulticounter.utils.RuntimePermissionUtil +import jackall.overlaymulticounter.vo.Counter +import java.util.* + +/** + * Created by matsumoto_k on 2017/11/10. + */ +class MainViewModel : ViewModel(), LifecycleObserver, CounterContract { + var counterAdapter: CounterAdapter + var counterRealmHelper = CounterRealmHelper() + var realmChangeListener: OrderedRealmCollectionChangeListener> + var results: RealmResults + + init { + val items = ArrayList() + results = counterRealmHelper.findAll() + results.forEachIndexed { index, counter -> + items.add(CounterItemViewModel(counter, this@MainViewModel as CounterContract)) + } + counterAdapter = CounterAdapter(App.get(), items) + realmChangeListener = OrderedRealmCollectionChangeListener { results, changeSet -> + changeSet.insertions.forEach { + counterAdapter.insert(CounterItemViewModel(results.get(it), this@MainViewModel as CounterContract)) + } + changeSet.deletions.forEach { + counterAdapter.remove(it) + } + } + results.addChangeListener(realmChangeListener) + } + + fun onClickStartService(view: View) { + // TODO: RuntimePermissionの処理 + if (RuntimePermissionUtil.checkOverlayPermission(view.context)) { + val intent = Intent(view.context, MainService::class.java) + view.context.startService(intent) + } else { + AlertDialog.Builder(view.context) + .setMessage("常駐機能を使用するには権限の許可が必要です。") + .setPositiveButton("設定", DialogInterface.OnClickListener { dialog, which -> + val intent = Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, Uri.parse("package:jackall.overlaymulticounter")) + (view.context as Activity).startActivityForResult(intent, 0) + }) + .setNegativeButton("許可しない", null) + .show() + } + } + + fun onClickClose(view: View) { + (view.context as Activity).finish() + } + + fun onClickAdd(view: View) { + counterRealmHelper.insert( + Counter( + id = counterRealmHelper.getNextId(), + title = "Counter${counterRealmHelper.getNextId()}", + count = 0 + ) + ) + } + + fun onClickRemove(view: View) { + counterRealmHelper.removeLast() + } + + fun onClickResetAll(view: View) { + counterRealmHelper.resetAll() + } + + override fun plus(id: Int) { + counterRealmHelper.plus(id) + } + + override fun minus(id: Int) { + counterRealmHelper.minus(id) + } + + override fun reset(id: Int) { + counterRealmHelper.reset(id) + } + + override fun editTitle(id: Int, title: String) { + counterRealmHelper.updateTitle(id, title) + } + + fun onDestory() { + counterRealmHelper.close() + } + + class Factory() : ViewModelProvider.NewInstanceFactory() { + override fun create(modelClass: Class): T { + return MainViewModel() as T + } + } + + object Adapter { + @JvmStatic + @BindingAdapter("android:setCounterAdapter") + fun setCounterAdapter(recyclerView: RecyclerView, counterAdapter: CounterAdapter?) { + if (counterAdapter == null) + return + recyclerView.layoutManager = LinearLayoutManager(App.get()) + recyclerView.adapter = counterAdapter + val dividerItemDecoration = DividerItemDecoration(recyclerView.context, LinearLayoutManager.VERTICAL) + dividerItemDecoration.setDrawable(recyclerView.context.resources.getDrawable(R.drawable.divider)) + recyclerView.addItemDecoration(dividerItemDecoration) + } + } +} \ No newline at end of file diff --git a/app/src/main/res/drawable/divider.xml b/app/src/main/res/drawable/divider.xml index 615d290..4f02f9e 100644 --- a/app/src/main/res/drawable/divider.xml +++ b/app/src/main/res/drawable/divider.xml @@ -1,6 +1,6 @@ - + \ No newline at end of file diff --git a/app/src/main/res/drawable/shape_counter_button.xml b/app/src/main/res/drawable/shape_counter_button.xml index b6ef243..1f6883c 100644 --- a/app/src/main/res/drawable/shape_counter_button.xml +++ b/app/src/main/res/drawable/shape_counter_button.xml @@ -4,7 +4,7 @@ - + @@ -12,7 +12,7 @@ - + diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index a0d88c9..f7d53cf 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -1,18 +1,104 @@ - + - + - + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/list_counter_item.xml b/app/src/main/res/layout/list_counter_item.xml index a7c1d84..f1bfda7 100644 --- a/app/src/main/res/layout/list_counter_item.xml +++ b/app/src/main/res/layout/list_counter_item.xml @@ -47,7 +47,7 @@ android:layout_height="wrap_content" android:gravity="center_horizontal" android:text="@{counterItemViewModel.count}" - android:textColor="#000000" + android:textColor="@color/main_text_color" android:textSize="@dimen/counter_count_text_size" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toStartOf="@id/counter_plus" @@ -112,7 +112,7 @@ android:layout_marginStart="4dp" android:gravity="center_vertical" android:text="@{counterItemViewModel.title}" - android:textColor="#000000" + android:textColor="@color/main_text_color" android:textStyle="bold" android:visibility="@{counterItemViewModel.titleVisible}" app:layout_constraintBottom_toBottomOf="parent" @@ -125,7 +125,7 @@ android:layout_height="0dp" android:layout_marginStart="4dp" android:text="@={counterItemViewModel.editText}" - android:textColor="#000000" + android:textColor="@color/main_text_color" android:visibility="@{counterItemViewModel.editTextVisible}" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" diff --git a/app/src/main/res/layout/overlay_counter.xml b/app/src/main/res/layout/overlay_counter.xml index 238769a..8295796 100644 --- a/app/src/main/res/layout/overlay_counter.xml +++ b/app/src/main/res/layout/overlay_counter.xml @@ -17,13 +17,17 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:background="#96ffffff" - android:paddingTop="8dp"> + android:paddingTop="@dimen/status_bar_height"> + android:layout_marginTop="8dp" + android:orientation="horizontal" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent"> #3F51B5 - #303F9F - #FF4081 + #ba000000 + #0084ff + + #ba000000 diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 5885930..0eb88fe 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -1,7 +1,7 @@ -