diff --git a/app/src/main/kotlin/jackall/moncalc/utils/RuntimePermissionUtil.kt b/app/src/main/kotlin/jackall/moncalc/utils/RuntimePermissionUtil.kt new file mode 100644 index 0000000..aaaa03d --- /dev/null +++ b/app/src/main/kotlin/jackall/moncalc/utils/RuntimePermissionUtil.kt @@ -0,0 +1,21 @@ +package jackall.moncalc.utils + +import android.content.Context +import android.os.Build +import android.provider.Settings + + +/** + * Created by matsumoto_k on 2017/11/06. + */ +class RuntimePermissionUtil { + + companion object { + fun checkOverlayPermission(context: Context): Boolean { + if (Build.VERSION.SDK_INT < 23) { + return true + } + return Settings.canDrawOverlays(context) + } + } +} diff --git a/app/src/main/kotlin/jackall/moncalc/viewmodel/MainViewModel.kt b/app/src/main/kotlin/jackall/moncalc/viewmodel/MainViewModel.kt index cb13575..0c4d3d1 100644 --- a/app/src/main/kotlin/jackall/moncalc/viewmodel/MainViewModel.kt +++ b/app/src/main/kotlin/jackall/moncalc/viewmodel/MainViewModel.kt @@ -1,49 +1,66 @@ package jackall.moncalc.viewmodel +import android.app.Activity +import android.app.AlertDialog import android.arch.lifecycle.ViewModel import android.arch.lifecycle.ViewModelProvider -import android.content.Context +import android.content.DialogInterface import android.content.Intent import android.databinding.ObservableField +import android.net.Uri +import android.provider.Settings import android.view.View import jackall.moncalc.R import jackall.moncalc.service.MainService +import jackall.moncalc.utils.RuntimePermissionUtil import jackall.moncalc.utils.ServiceUtil.Companion.isMainServiceRunning + /** * MainActivityのViewModel. * * Created by matsumoto_k on 2017/11/01. */ -class MainViewModel(val context: Context) : LifecycleViewModel() { +class MainViewModel(val activity: Activity) : LifecycleViewModel() { val serviceButtonText = ObservableField("") val serviceIntent by lazy { - val intent = Intent(context, MainService::class.java) + val intent = Intent(activity, MainService::class.java) intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK intent } init { - if (isMainServiceRunning(context)) { - serviceButtonText.set(context.resources.getString(R.string.stop_service)) + if (isMainServiceRunning(activity)) { + serviceButtonText.set(activity.resources.getString(R.string.stop_service)) } else { - serviceButtonText.set(context.resources.getString(R.string.start_service)) + serviceButtonText.set(activity.resources.getString(R.string.start_service)) } } - class Factory(val context: Context) : ViewModelProvider.NewInstanceFactory() { + class Factory(val context: Activity) : ViewModelProvider.NewInstanceFactory() { override fun create(modelClass: Class): T { return MainViewModel(context) as T } } fun onClickServiceButton(view: View) { - if (!isMainServiceRunning(context)) { - context.startService(serviceIntent) - serviceButtonText.set(context.resources.getString(R.string.stop_service)) + if (RuntimePermissionUtil.checkOverlayPermission(activity)) { + if (!isMainServiceRunning(activity)) { + activity.startService(serviceIntent) + serviceButtonText.set(activity.resources.getString(R.string.stop_service)) + } else { + activity.stopService(serviceIntent) + serviceButtonText.set(activity.resources.getString(R.string.start_service)) + } } else { - context.stopService(serviceIntent) - serviceButtonText.set(context.resources.getString(R.string.start_service)) + AlertDialog.Builder(activity) + .setMessage("常駐機能を使用するには権限の許可が必要です。") + .setPositiveButton("設定", DialogInterface.OnClickListener { dialog, which -> + val intent = Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, Uri.parse("package:jackall.moncalc")) + activity.startActivityForResult(intent, 2) + }) + .setNegativeButton("許可しない", null) + .show() } } } \ No newline at end of file