mirror of
https://github.com/SimpleMobileTools/Simple-Flashlight.git
synced 2025-04-13 18:01:57 +02:00
more rewriting to kotlin
This commit is contained in:
parent
18b5c9de46
commit
94fef5494c
@ -1,5 +1,4 @@
|
||||
apply plugin: 'com.android.application'
|
||||
apply plugin: 'android-apt'
|
||||
apply plugin: 'kotlin-android'
|
||||
apply plugin: 'kotlin-android-extensions'
|
||||
|
||||
@ -39,12 +38,8 @@ android {
|
||||
|
||||
dependencies {
|
||||
compile 'com.simplemobiletools:commons:2.35.6'
|
||||
compile 'com.jakewharton:butterknife:8.0.1'
|
||||
compile 'com.squareup:otto:1.3.8'
|
||||
compile 'com.github.yukuku:ambilwarna:2.0.1'
|
||||
compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
|
||||
|
||||
apt 'com.jakewharton:butterknife-compiler:8.0.1'
|
||||
}
|
||||
|
||||
buildscript {
|
||||
|
17
app/proguard-rules.pro
vendored
17
app/proguard-rules.pro
vendored
@ -1,20 +1,3 @@
|
||||
# Add project specific ProGuard rules here.
|
||||
# By default, the flags in this file are appended to flags specified
|
||||
# in $ANDROID_HOME/tools/proguard/proguard-android.txt
|
||||
# You can edit the include path and order by changing the proguardFiles
|
||||
# directive in build.gradle.
|
||||
#
|
||||
# For more details, see
|
||||
# http://developer.android.com/guide/developing/tools/proguard.html
|
||||
|
||||
# Add any project specific keep options here:
|
||||
|
||||
# If your project uses WebView with JS, uncomment the following
|
||||
# and specify the fully qualified class name to the JavaScript interface
|
||||
# class:
|
||||
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
|
||||
# public *;
|
||||
#}
|
||||
# Otto
|
||||
-keepattributes *Annotation*
|
||||
-keepclassmembers class ** {
|
||||
|
@ -30,7 +30,7 @@
|
||||
<activity
|
||||
android:name=".activities.MainActivity"
|
||||
android:screenOrientation="portrait"
|
||||
android:theme="@style/BlackSplashScreen.Dark"/>
|
||||
android:theme="@style/AppTheme"/>
|
||||
|
||||
<activity
|
||||
android:name=".activities.WidgetConfigureActivity"
|
||||
|
@ -1,76 +1,84 @@
|
||||
package com.simplemobiletools.flashlight.activities
|
||||
|
||||
import android.Manifest
|
||||
import android.content.Intent
|
||||
import android.content.pm.PackageManager
|
||||
import android.graphics.PorterDuff
|
||||
import android.os.Bundle
|
||||
import android.support.v4.app.ActivityCompat
|
||||
import android.support.v4.content.ContextCompat
|
||||
import android.view.Menu
|
||||
import android.view.MenuItem
|
||||
import android.view.View
|
||||
import android.view.WindowManager
|
||||
import android.widget.ImageView
|
||||
import android.widget.SeekBar
|
||||
import butterknife.ButterKnife
|
||||
import butterknife.OnClick
|
||||
import com.simplemobiletools.commons.activities.AboutActivity
|
||||
import com.simplemobiletools.commons.extensions.beInvisible
|
||||
import com.simplemobiletools.commons.extensions.*
|
||||
import com.simplemobiletools.commons.helpers.LICENSE_KOTLIN
|
||||
import com.simplemobiletools.commons.helpers.LICENSE_OTTO
|
||||
import com.simplemobiletools.commons.helpers.PERMISSION_CAMERA
|
||||
import com.simplemobiletools.flashlight.BuildConfig
|
||||
import com.simplemobiletools.flashlight.R
|
||||
import com.simplemobiletools.flashlight.extensions.config
|
||||
import com.simplemobiletools.flashlight.helpers.BusProvider
|
||||
import com.simplemobiletools.flashlight.helpers.MyCameraImpl
|
||||
import com.simplemobiletools.flashlight.helpers.Utils
|
||||
import com.simplemobiletools.flashlight.models.Events
|
||||
import com.squareup.otto.Bus
|
||||
import com.squareup.otto.Subscribe
|
||||
import kotlinx.android.synthetic.main.activity_main.*
|
||||
|
||||
class MainActivity : SimpleActivity() {
|
||||
companion object {
|
||||
private val CAMERA_PERMISSION = 1
|
||||
private val MAX_STROBO_DELAY = 2000
|
||||
private val MIN_STROBO_DELAY = 30
|
||||
|
||||
private var mBus: Bus? = null
|
||||
}
|
||||
private val MAX_STROBO_DELAY = 2000
|
||||
private val MIN_STROBO_DELAY = 30
|
||||
|
||||
private var mBus: Bus? = null
|
||||
private var mCameraImpl: MyCameraImpl? = null
|
||||
private var mJustGrantedPermission: Boolean = false
|
||||
|
||||
private val isCameraPermissionGranted: Boolean
|
||||
get() = ContextCompat.checkSelfPermission(applicationContext, Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
setContentView(R.layout.activity_main)
|
||||
ButterKnife.bind(this)
|
||||
|
||||
mBus = BusProvider.instance
|
||||
changeIconColor(R.color.translucent_white, bright_display_btn)
|
||||
changeIconColor(R.color.translucent_white, stroboscope_btn)
|
||||
stroboscope_bar.max = MAX_STROBO_DELAY - MIN_STROBO_DELAY
|
||||
stroboscope_bar.progress = stroboscope_bar.max / 2
|
||||
|
||||
stroboscope_bar.setOnSeekBarChangeListener(object : SeekBar.OnSeekBarChangeListener {
|
||||
override fun onProgressChanged(seekBar: SeekBar, progress: Int, b: Boolean) {
|
||||
val frequency = stroboscope_bar.max - progress + MIN_STROBO_DELAY
|
||||
if (mCameraImpl != null)
|
||||
mCameraImpl!!.setStroboFrequency(frequency)
|
||||
}
|
||||
bright_display_btn.setOnClickListener {
|
||||
startActivity(Intent(applicationContext, BrightDisplayActivity::class.java))
|
||||
}
|
||||
|
||||
override fun onStartTrackingTouch(seekBar: SeekBar) {
|
||||
toggle_btn.setOnClickListener {
|
||||
mCameraImpl!!.toggleFlashlight()
|
||||
}
|
||||
|
||||
}
|
||||
setupStroboscope()
|
||||
}
|
||||
|
||||
override fun onStopTrackingTouch(seekBar: SeekBar) {
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
mCameraImpl!!.handleCameraSetup()
|
||||
mCameraImpl!!.checkFlashlight()
|
||||
|
||||
}
|
||||
})
|
||||
bright_display_btn.beVisibleIf(config.brightDisplay)
|
||||
stroboscope_btn.beVisibleIf(config.stroboscope)
|
||||
if (!config.stroboscope) {
|
||||
mCameraImpl!!.stopStroboscope()
|
||||
stroboscope_bar.beInvisible()
|
||||
}
|
||||
}
|
||||
|
||||
override fun onStart() {
|
||||
super.onStart()
|
||||
mBus!!.register(this)
|
||||
|
||||
if (mCameraImpl == null) {
|
||||
setupCameraImpl()
|
||||
}
|
||||
}
|
||||
|
||||
override fun onStop() {
|
||||
super.onStop()
|
||||
mBus!!.unregister(this)
|
||||
}
|
||||
|
||||
override fun onDestroy() {
|
||||
super.onDestroy()
|
||||
releaseCamera()
|
||||
}
|
||||
|
||||
override fun onCreateOptionsMenu(menu: Menu): Boolean {
|
||||
@ -80,16 +88,11 @@ class MainActivity : SimpleActivity() {
|
||||
|
||||
override fun onOptionsItemSelected(item: MenuItem): Boolean {
|
||||
when (item.itemId) {
|
||||
R.id.settings -> {
|
||||
startActivity(Intent(applicationContext, SettingsActivity::class.java))
|
||||
return true
|
||||
}
|
||||
R.id.about -> {
|
||||
startActivity(Intent(applicationContext, AboutActivity::class.java))
|
||||
return true
|
||||
}
|
||||
R.id.settings -> launchSettings()
|
||||
R.id.about -> launchAbout()
|
||||
else -> return super.onOptionsItemSelected(item)
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
private fun launchSettings() {
|
||||
@ -105,88 +108,55 @@ class MainActivity : SimpleActivity() {
|
||||
mCameraImpl!!.enableFlashlight()
|
||||
}
|
||||
|
||||
@OnClick(R.id.toggle_btn)
|
||||
fun toggleFlashlight() {
|
||||
mCameraImpl!!.toggleFlashlight()
|
||||
}
|
||||
private fun setupStroboscope() {
|
||||
stroboscope_btn.setOnClickListener {
|
||||
toggleStroboscope()
|
||||
}
|
||||
|
||||
@OnClick(R.id.bright_display_btn)
|
||||
fun launchBrightDisplay() {
|
||||
startActivity(Intent(applicationContext, BrightDisplayActivity::class.java))
|
||||
}
|
||||
stroboscope_bar.max = MAX_STROBO_DELAY - MIN_STROBO_DELAY
|
||||
stroboscope_bar.progress = stroboscope_bar.max / 2
|
||||
stroboscope_bar.setOnSeekBarChangeListener(object : SeekBar.OnSeekBarChangeListener {
|
||||
override fun onProgressChanged(seekBar: SeekBar, progress: Int, b: Boolean) {
|
||||
val frequency = stroboscope_bar.max - progress + MIN_STROBO_DELAY
|
||||
if (mCameraImpl != null)
|
||||
mCameraImpl!!.stroboFrequency = frequency
|
||||
}
|
||||
|
||||
@OnClick(R.id.stroboscope_btn)
|
||||
fun tryToggleStroboscope() {
|
||||
toggleStroboscope()
|
||||
override fun onStartTrackingTouch(seekBar: SeekBar) {
|
||||
|
||||
}
|
||||
|
||||
override fun onStopTrackingTouch(seekBar: SeekBar) {
|
||||
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
private fun toggleStroboscope() {
|
||||
// use the old Camera API for stroboscope, the new Camera Manager is way too slow
|
||||
if (isCameraPermissionGranted || Utils.isNougat) {
|
||||
if (mCameraImpl!!.toggleStroboscope()) {
|
||||
stroboscope_bar.visibility = if (stroboscope_bar.visibility == View.VISIBLE) View.INVISIBLE else View.VISIBLE
|
||||
changeIconColor(if (stroboscope_bar.visibility == View.VISIBLE) R.color.colorPrimary else R.color.translucent_white, stroboscope_btn)
|
||||
}
|
||||
if (isNougatPlus()) {
|
||||
cameraPermissionGranted()
|
||||
} else {
|
||||
val permissions = arrayOf(Manifest.permission.CAMERA)
|
||||
ActivityCompat.requestPermissions(this, permissions, CAMERA_PERMISSION)
|
||||
}
|
||||
}
|
||||
|
||||
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<String>, grantResults: IntArray) {
|
||||
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
|
||||
|
||||
if (requestCode == CAMERA_PERMISSION) {
|
||||
mJustGrantedPermission = true
|
||||
if (isCameraPermissionGranted) {
|
||||
toggleStroboscope()
|
||||
} else {
|
||||
Utils.showToast(applicationContext, R.string.camera_permission)
|
||||
handlePermission(PERMISSION_CAMERA) {
|
||||
if (it) {
|
||||
cameraPermissionGranted()
|
||||
} else {
|
||||
toast(R.string.camera_permission)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun onStart() {
|
||||
super.onStart()
|
||||
mBus!!.register(this)
|
||||
|
||||
if (mCameraImpl == null) {
|
||||
setupCameraImpl()
|
||||
private fun cameraPermissionGranted() {
|
||||
if (mCameraImpl!!.toggleStroboscope()) {
|
||||
stroboscope_bar.beInvisibleIf(stroboscope_bar.visibility == View.VISIBLE)
|
||||
changeIconColor(if (stroboscope_bar.visibility == View.VISIBLE) R.color.color_primary else R.color.translucent_white, stroboscope_btn)
|
||||
}
|
||||
}
|
||||
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
if (mJustGrantedPermission) {
|
||||
mJustGrantedPermission = false
|
||||
return
|
||||
}
|
||||
mCameraImpl!!.handleCameraSetup()
|
||||
mCameraImpl!!.checkFlashlight()
|
||||
|
||||
bright_display_btn!!.visibility = if (config.brightDisplay) View.VISIBLE else View.GONE
|
||||
stroboscope_btn!!.visibility = if (config.stroboscope) View.VISIBLE else View.GONE
|
||||
if (!config.stroboscope) {
|
||||
mCameraImpl!!.stopStroboscope()
|
||||
stroboscope_bar.visibility = View.INVISIBLE
|
||||
}
|
||||
}
|
||||
|
||||
override fun onStop() {
|
||||
super.onStop()
|
||||
mBus!!.unregister(this)
|
||||
}
|
||||
|
||||
override fun onDestroy() {
|
||||
super.onDestroy()
|
||||
releaseCamera()
|
||||
}
|
||||
|
||||
private fun releaseCamera() {
|
||||
if (mCameraImpl != null) {
|
||||
mCameraImpl!!.releaseCamera()
|
||||
mCameraImpl = null
|
||||
}
|
||||
mCameraImpl?.releaseCamera()
|
||||
mCameraImpl = null
|
||||
}
|
||||
|
||||
@Subscribe
|
||||
@ -198,15 +168,15 @@ class MainActivity : SimpleActivity() {
|
||||
}
|
||||
}
|
||||
|
||||
fun enableFlashlight() {
|
||||
changeIconColor(R.color.colorPrimary, toggle_btn)
|
||||
private fun enableFlashlight() {
|
||||
changeIconColor(R.color.color_primary, toggle_btn)
|
||||
window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
|
||||
|
||||
changeIconColor(R.color.translucent_white, stroboscope_btn)
|
||||
stroboscope_bar.beInvisible()
|
||||
}
|
||||
|
||||
fun disableFlashlight() {
|
||||
private fun disableFlashlight() {
|
||||
changeIconColor(R.color.translucent_white, toggle_btn)
|
||||
window.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
|
||||
}
|
||||
@ -218,7 +188,7 @@ class MainActivity : SimpleActivity() {
|
||||
|
||||
@Subscribe
|
||||
fun cameraUnavailable(event: Events.CameraUnavailable) {
|
||||
Utils.showToast(this, R.string.camera_error)
|
||||
toast(R.string.camera_error)
|
||||
disableFlashlight()
|
||||
}
|
||||
}
|
||||
|
@ -1,54 +1,45 @@
|
||||
package com.simplemobiletools.flashlight.activities
|
||||
|
||||
import android.os.Bundle
|
||||
import android.support.v4.app.TaskStackBuilder
|
||||
import android.support.v7.widget.SwitchCompat
|
||||
import butterknife.BindView
|
||||
import butterknife.ButterKnife
|
||||
import butterknife.OnClick
|
||||
import com.simplemobiletools.commons.extensions.updateTextColors
|
||||
import com.simplemobiletools.flashlight.R
|
||||
import com.simplemobiletools.flashlight.helpers.Config
|
||||
import com.simplemobiletools.flashlight.extensions.config
|
||||
import kotlinx.android.synthetic.main.activity_settings.*
|
||||
|
||||
class SettingsActivity : SimpleActivity() {
|
||||
@BindView(R.id.settings_bright_display) internal var mBrightDisplaySwitch: SwitchCompat? = null
|
||||
@BindView(R.id.settings_stroboscope) internal var mStroboscopeSwitch: SwitchCompat? = null
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
setContentView(R.layout.activity_settings)
|
||||
mConfig = Config.newInstance(applicationContext)
|
||||
ButterKnife.bind(this)
|
||||
}
|
||||
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
|
||||
setupCustomizeColors()
|
||||
setupBrightDisplay()
|
||||
setupStroboscope()
|
||||
updateTextColors(settings_holder)
|
||||
}
|
||||
|
||||
private fun setupCustomizeColors() {
|
||||
settings_customize_colors_holder.setOnClickListener {
|
||||
startCustomizationActivity()
|
||||
}
|
||||
}
|
||||
|
||||
private fun setupBrightDisplay() {
|
||||
mBrightDisplaySwitch!!.isChecked = mConfig!!.brightDisplay
|
||||
settings_bright_display.isChecked = config.brightDisplay
|
||||
settings_bright_display_holder.setOnClickListener {
|
||||
settings_bright_display.toggle()
|
||||
config.brightDisplay = settings_bright_display.isChecked
|
||||
}
|
||||
}
|
||||
|
||||
private fun setupStroboscope() {
|
||||
mStroboscopeSwitch!!.isChecked = mConfig!!.stroboscope
|
||||
}
|
||||
|
||||
@OnClick(R.id.settings_bright_display_holder)
|
||||
fun handleBrightDisplay() {
|
||||
mBrightDisplaySwitch!!.isChecked = !mBrightDisplaySwitch!!.isChecked
|
||||
mConfig!!.brightDisplay = mBrightDisplaySwitch!!.isChecked
|
||||
}
|
||||
|
||||
@OnClick(R.id.settings_stroboscope_holder)
|
||||
fun handleStroboscope() {
|
||||
mStroboscopeSwitch!!.isChecked = !mStroboscopeSwitch!!.isChecked
|
||||
mConfig!!.stroboscope = mStroboscopeSwitch!!.isChecked
|
||||
}
|
||||
|
||||
private fun restartActivity() {
|
||||
TaskStackBuilder.create(applicationContext).addNextIntentWithParentStack(intent).startActivities()
|
||||
}
|
||||
|
||||
companion object {
|
||||
|
||||
private var mConfig: Config? = null
|
||||
settings_stroboscope.isChecked = config.stroboscope
|
||||
settings_stroboscope_holder.setOnClickListener {
|
||||
settings_stroboscope.toggle()
|
||||
config.stroboscope = settings_stroboscope.isChecked
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -8,23 +8,95 @@ import android.graphics.Color
|
||||
import android.graphics.PorterDuff
|
||||
import android.os.Bundle
|
||||
import android.support.v7.app.AppCompatActivity
|
||||
import android.view.View
|
||||
import android.widget.ImageView
|
||||
import android.widget.RemoteViews
|
||||
import android.widget.SeekBar
|
||||
import butterknife.BindView
|
||||
import butterknife.ButterKnife
|
||||
import butterknife.OnClick
|
||||
import com.simplemobiletools.commons.dialogs.ColorPickerDialog
|
||||
import com.simplemobiletools.commons.extensions.adjustAlpha
|
||||
import com.simplemobiletools.commons.helpers.PREFS_KEY
|
||||
import com.simplemobiletools.flashlight.R
|
||||
import com.simplemobiletools.flashlight.helpers.MyWidgetProvider
|
||||
import com.simplemobiletools.flashlight.helpers.WIDGET_COLOR
|
||||
import yuku.ambilwarna.AmbilWarnaDialog
|
||||
import kotlinx.android.synthetic.main.widget_config.*
|
||||
|
||||
class WidgetConfigureActivity : AppCompatActivity() {
|
||||
@BindView(R.id.config_widget_seekbar) internal var mWidgetSeekBar: SeekBar? = null
|
||||
@BindView(R.id.config_widget_color) internal var mWidgetColorPicker: View? = null
|
||||
@BindView(R.id.config_image) internal var mImage: ImageView? = null
|
||||
companion object {
|
||||
private var mWidgetAlpha = 0f
|
||||
private var mWidgetId = 0
|
||||
private var mWidgetColor = 0
|
||||
private var mWidgetColorWithoutTransparency = 0
|
||||
}
|
||||
|
||||
public override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
setResult(Activity.RESULT_CANCELED)
|
||||
setContentView(R.layout.widget_config)
|
||||
initVariables()
|
||||
|
||||
val intent = intent
|
||||
val extras = intent.extras
|
||||
if (extras != null)
|
||||
mWidgetId = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID)
|
||||
|
||||
if (mWidgetId == AppWidgetManager.INVALID_APPWIDGET_ID)
|
||||
finish()
|
||||
|
||||
config_save.setOnClickListener { saveConfig() }
|
||||
config_widget_color.setOnClickListener { pickBackgroundColor() }
|
||||
}
|
||||
|
||||
private fun initVariables() {
|
||||
val prefs = getSharedPreferences(PREFS_KEY, Context.MODE_PRIVATE)
|
||||
mWidgetColor = prefs.getInt(WIDGET_COLOR, 1)
|
||||
if (mWidgetColor == 1) {
|
||||
mWidgetColor = resources.getColor(R.color.color_primary)
|
||||
mWidgetAlpha = 1f
|
||||
} else {
|
||||
mWidgetAlpha = Color.alpha(mWidgetColor) / 255.toFloat()
|
||||
}
|
||||
|
||||
mWidgetColorWithoutTransparency = Color.rgb(Color.red(mWidgetColor), Color.green(mWidgetColor), Color.blue(mWidgetColor))
|
||||
config_widget_seekbar.setOnSeekBarChangeListener(seekbarChangeListener)
|
||||
config_widget_seekbar.progress = (mWidgetAlpha * 100).toInt()
|
||||
updateColors()
|
||||
}
|
||||
|
||||
fun saveConfig() {
|
||||
val appWidgetManager = AppWidgetManager.getInstance(this)
|
||||
val views = RemoteViews(packageName, R.layout.widget)
|
||||
appWidgetManager.updateAppWidget(mWidgetId, views)
|
||||
|
||||
storeWidgetColors()
|
||||
requestWidgetUpdate()
|
||||
|
||||
val resultValue = Intent()
|
||||
resultValue.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, mWidgetId)
|
||||
setResult(Activity.RESULT_OK, resultValue)
|
||||
finish()
|
||||
}
|
||||
|
||||
fun pickBackgroundColor() {
|
||||
ColorPickerDialog(this, mWidgetColorWithoutTransparency) {
|
||||
mWidgetColorWithoutTransparency = it
|
||||
updateColors()
|
||||
}
|
||||
}
|
||||
|
||||
private fun storeWidgetColors() {
|
||||
val prefs = getSharedPreferences(PREFS_KEY, Context.MODE_PRIVATE)
|
||||
prefs.edit().putInt(WIDGET_COLOR, mWidgetColor).apply()
|
||||
}
|
||||
|
||||
private fun requestWidgetUpdate() {
|
||||
val intent = Intent(AppWidgetManager.ACTION_APPWIDGET_UPDATE, null, this, MyWidgetProvider::class.java)
|
||||
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, intArrayOf(mWidgetId))
|
||||
sendBroadcast(intent)
|
||||
}
|
||||
|
||||
private fun updateColors() {
|
||||
mWidgetColor = mWidgetColorWithoutTransparency.adjustAlpha(mWidgetAlpha)
|
||||
config_widget_color.setBackgroundColor(mWidgetColor)
|
||||
config_image.background.mutate().setColorFilter(mWidgetColor, PorterDuff.Mode.SRC_IN)
|
||||
}
|
||||
|
||||
private val seekbarChangeListener = object : SeekBar.OnSeekBarChangeListener {
|
||||
override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) {
|
||||
@ -40,98 +112,4 @@ class WidgetConfigureActivity : AppCompatActivity() {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
setResult(Activity.RESULT_CANCELED)
|
||||
setContentView(R.layout.widget_config)
|
||||
ButterKnife.bind(this)
|
||||
initVariables()
|
||||
|
||||
val intent = intent
|
||||
val extras = intent.extras
|
||||
if (extras != null)
|
||||
mWidgetId = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID)
|
||||
|
||||
if (mWidgetId == AppWidgetManager.INVALID_APPWIDGET_ID)
|
||||
finish()
|
||||
}
|
||||
|
||||
private fun initVariables() {
|
||||
val prefs = getSharedPreferences(PREFS_KEY, Context.MODE_PRIVATE)
|
||||
mWidgetColor = prefs.getInt(WIDGET_COLOR, 1)
|
||||
if (mWidgetColor == 1) {
|
||||
mWidgetColor = resources.getColor(R.color.colorPrimary)
|
||||
mWidgetAlpha = 1f
|
||||
} else {
|
||||
mWidgetAlpha = Color.alpha(mWidgetColor) / 255.toFloat()
|
||||
}
|
||||
|
||||
mWidgetColorWithoutTransparency = Color.rgb(Color.red(mWidgetColor), Color.green(mWidgetColor), Color.blue(mWidgetColor))
|
||||
mWidgetSeekBar!!.setOnSeekBarChangeListener(seekbarChangeListener)
|
||||
mWidgetSeekBar!!.progress = (mWidgetAlpha * 100).toInt()
|
||||
updateColors()
|
||||
}
|
||||
|
||||
@OnClick(R.id.config_save)
|
||||
fun saveConfig() {
|
||||
val appWidgetManager = AppWidgetManager.getInstance(this)
|
||||
val views = RemoteViews(packageName, R.layout.widget)
|
||||
appWidgetManager.updateAppWidget(mWidgetId, views)
|
||||
|
||||
storeWidgetColors()
|
||||
requestWidgetUpdate()
|
||||
|
||||
val resultValue = Intent()
|
||||
resultValue.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, mWidgetId)
|
||||
setResult(Activity.RESULT_OK, resultValue)
|
||||
finish()
|
||||
}
|
||||
|
||||
@OnClick(R.id.config_widget_color)
|
||||
fun pickBackgroundColor() {
|
||||
val dialog = AmbilWarnaDialog(this, mWidgetColorWithoutTransparency, object : AmbilWarnaDialog.OnAmbilWarnaListener {
|
||||
override fun onCancel(dialog: AmbilWarnaDialog) {}
|
||||
|
||||
override fun onOk(dialog: AmbilWarnaDialog, color: Int) {
|
||||
mWidgetColorWithoutTransparency = color
|
||||
updateColors()
|
||||
}
|
||||
})
|
||||
|
||||
dialog.show()
|
||||
}
|
||||
|
||||
private fun storeWidgetColors() {
|
||||
val prefs = getSharedPreferences(PREFS_KEY, Context.MODE_PRIVATE)
|
||||
prefs.edit().putInt(WIDGET_COLOR, mWidgetColor).apply()
|
||||
}
|
||||
|
||||
private fun requestWidgetUpdate() {
|
||||
val intent = Intent(AppWidgetManager.ACTION_APPWIDGET_UPDATE, null, this, MyWidgetProvider::class.java)
|
||||
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, intArrayOf(mWidgetId))
|
||||
sendBroadcast(intent)
|
||||
}
|
||||
|
||||
private fun updateColors() {
|
||||
mWidgetColor = adjustAlpha(mWidgetColorWithoutTransparency, mWidgetAlpha)
|
||||
mWidgetColorPicker!!.setBackgroundColor(mWidgetColor)
|
||||
mImage!!.background.mutate().setColorFilter(mWidgetColor, PorterDuff.Mode.SRC_IN)
|
||||
}
|
||||
|
||||
private fun adjustAlpha(color: Int, factor: Float): Int {
|
||||
val alpha = Math.round(Color.alpha(color) * factor)
|
||||
val red = Color.red(color)
|
||||
val green = Color.green(color)
|
||||
val blue = Color.blue(color)
|
||||
return Color.argb(alpha, red, green, blue)
|
||||
}
|
||||
|
||||
companion object {
|
||||
|
||||
private var mWidgetAlpha: Float = 0.toFloat()
|
||||
private var mWidgetId: Int = 0
|
||||
private var mWidgetColor: Int = 0
|
||||
private var mWidgetColorWithoutTransparency: Int = 0
|
||||
}
|
||||
}
|
||||
|
@ -6,25 +6,20 @@ import android.hardware.camera2.CameraAccessException
|
||||
import android.hardware.camera2.CameraManager
|
||||
import android.os.Build
|
||||
import android.os.Handler
|
||||
import android.util.Log
|
||||
|
||||
import com.simplemobiletools.flashlight.models.Events
|
||||
import com.squareup.otto.Bus
|
||||
|
||||
internal class MarshmallowCamera @TargetApi(Build.VERSION_CODES.M)
|
||||
constructor(private val mContext: Context) {
|
||||
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
|
||||
internal class MarshmallowCamera constructor(val context: Context) {
|
||||
|
||||
private val manager: CameraManager
|
||||
private val manager: CameraManager = context.getSystemService(Context.CAMERA_SERVICE) as CameraManager
|
||||
private var cameraId: String? = null
|
||||
|
||||
init {
|
||||
manager = mContext.getSystemService(Context.CAMERA_SERVICE) as CameraManager
|
||||
try {
|
||||
val list = manager.cameraIdList
|
||||
cameraId = list[0]
|
||||
cameraId = manager.cameraIdList[0]
|
||||
} catch (ignored: CameraAccessException) {
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@TargetApi(Build.VERSION_CODES.M)
|
||||
@ -32,15 +27,10 @@ constructor(private val mContext: Context) {
|
||||
try {
|
||||
manager.setTorchMode(cameraId!!, enable)
|
||||
} catch (e: CameraAccessException) {
|
||||
Log.e(TAG, "toggle marshmallow flashlight " + e.message)
|
||||
|
||||
val mainRunnable = Runnable { bus.post(Events.CameraUnavailable()) }
|
||||
Handler(mContext.mainLooper).post(mainRunnable)
|
||||
val mainRunnable = Runnable {
|
||||
bus.post(Events.CameraUnavailable())
|
||||
}
|
||||
Handler(context.mainLooper).post(mainRunnable)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
companion object {
|
||||
private val TAG = MyCameraImpl::class.java.simpleName
|
||||
}
|
||||
}
|
||||
|
@ -1,109 +1,104 @@
|
||||
package com.simplemobiletools.flashlight.helpers
|
||||
|
||||
import android.annotation.TargetApi
|
||||
import android.content.Context
|
||||
import android.graphics.SurfaceTexture
|
||||
import android.hardware.Camera
|
||||
import android.os.Build
|
||||
import android.os.Handler
|
||||
import android.util.Log
|
||||
|
||||
import com.simplemobiletools.commons.extensions.isMarshmallowPlus
|
||||
import com.simplemobiletools.commons.extensions.isNougatPlus
|
||||
import com.simplemobiletools.commons.extensions.toast
|
||||
import com.simplemobiletools.flashlight.R
|
||||
import com.simplemobiletools.flashlight.models.Events
|
||||
import com.squareup.otto.Bus
|
||||
|
||||
import java.io.IOException
|
||||
|
||||
class MyCameraImpl(private val mContext: Context) {
|
||||
class MyCameraImpl(val context: Context) {
|
||||
var stroboFrequency = 1000
|
||||
|
||||
companion object {
|
||||
private val TAG = MyCameraImpl::class.java.simpleName
|
||||
|
||||
private var mCamera: Camera? = null
|
||||
private var camera: Camera? = null
|
||||
private var mParams: Camera.Parameters? = null
|
||||
private var mBus: Bus? = null
|
||||
private var bus: Bus? = null
|
||||
|
||||
private var mIsFlashlightOn: Boolean = false
|
||||
private var mIsMarshmallow: Boolean = false
|
||||
private var mShouldEnableFlashlight: Boolean = false
|
||||
private var mStroboFrequency: Int = 0
|
||||
private var mIsFlashlightOn = false
|
||||
private var mIsMarshmallow = false
|
||||
private var mShouldEnableFlashlight = false
|
||||
}
|
||||
|
||||
private var mMarshmallowCamera: MarshmallowCamera? = null
|
||||
@Volatile private var mShouldStroboscopeStop: Boolean = false
|
||||
@Volatile private var mIsStroboscopeRunning: Boolean = false
|
||||
|
||||
private val isMarshmallow: Boolean
|
||||
get() = android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M
|
||||
private var marshmallowCamera: MarshmallowCamera? = null
|
||||
@Volatile private var shouldStroboscopeStop = false
|
||||
@Volatile private var isStroboscopeRunning = false
|
||||
|
||||
private val stroboscope = Runnable {
|
||||
if (mIsStroboscopeRunning) {
|
||||
if (isStroboscopeRunning) {
|
||||
return@Runnable
|
||||
}
|
||||
|
||||
mShouldStroboscopeStop = false
|
||||
mIsStroboscopeRunning = true
|
||||
shouldStroboscopeStop = false
|
||||
isStroboscopeRunning = true
|
||||
|
||||
if (Utils.isNougat) {
|
||||
while (!mShouldStroboscopeStop) {
|
||||
if (context.isNougatPlus()) {
|
||||
while (!shouldStroboscopeStop) {
|
||||
try {
|
||||
mMarshmallowCamera!!.toggleMarshmallowFlashlight(mBus!!, true)
|
||||
Thread.sleep(mStroboFrequency.toLong())
|
||||
mMarshmallowCamera!!.toggleMarshmallowFlashlight(mBus!!, false)
|
||||
Thread.sleep(mStroboFrequency.toLong())
|
||||
marshmallowCamera!!.toggleMarshmallowFlashlight(bus!!, true)
|
||||
Thread.sleep(stroboFrequency.toLong())
|
||||
marshmallowCamera!!.toggleMarshmallowFlashlight(bus!!, false)
|
||||
Thread.sleep(stroboFrequency.toLong())
|
||||
} catch (ignored: InterruptedException) {
|
||||
mShouldStroboscopeStop = true
|
||||
shouldStroboscopeStop = true
|
||||
} catch (ignored: RuntimeException) {
|
||||
mShouldStroboscopeStop = true
|
||||
shouldStroboscopeStop = true
|
||||
}
|
||||
|
||||
}
|
||||
} else {
|
||||
if (mCamera == null) {
|
||||
if (camera == null) {
|
||||
initCamera()
|
||||
}
|
||||
|
||||
val torchOn = mCamera!!.parameters
|
||||
val torchOff = mCamera!!.parameters
|
||||
val torchOn = camera!!.parameters
|
||||
val torchOff = camera!!.parameters
|
||||
torchOn.flashMode = Camera.Parameters.FLASH_MODE_TORCH
|
||||
torchOff.flashMode = Camera.Parameters.FLASH_MODE_OFF
|
||||
|
||||
val dummy = SurfaceTexture(1)
|
||||
try {
|
||||
mCamera!!.setPreviewTexture(dummy)
|
||||
camera!!.setPreviewTexture(dummy)
|
||||
} catch (e: IOException) {
|
||||
Log.e(TAG, "setup stroboscope1 " + e.message)
|
||||
}
|
||||
|
||||
mCamera!!.startPreview()
|
||||
camera!!.startPreview()
|
||||
|
||||
while (!mShouldStroboscopeStop) {
|
||||
while (!shouldStroboscopeStop) {
|
||||
try {
|
||||
mCamera!!.parameters = torchOn
|
||||
Thread.sleep(mStroboFrequency.toLong())
|
||||
mCamera!!.parameters = torchOff
|
||||
Thread.sleep(mStroboFrequency.toLong())
|
||||
camera!!.parameters = torchOn
|
||||
Thread.sleep(stroboFrequency.toLong())
|
||||
camera!!.parameters = torchOff
|
||||
Thread.sleep(stroboFrequency.toLong())
|
||||
} catch (ignored: InterruptedException) {
|
||||
mShouldStroboscopeStop = true
|
||||
shouldStroboscopeStop = true
|
||||
} catch (ignored: RuntimeException) {
|
||||
mShouldStroboscopeStop = true
|
||||
shouldStroboscopeStop = true
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
try {
|
||||
if (mCamera != null) {
|
||||
mCamera!!.parameters = torchOff
|
||||
if (camera != null) {
|
||||
camera!!.parameters = torchOff
|
||||
if (!mShouldEnableFlashlight || mIsMarshmallow) {
|
||||
mCamera!!.release()
|
||||
mCamera = null
|
||||
camera!!.release()
|
||||
camera = null
|
||||
}
|
||||
}
|
||||
} catch (e: RuntimeException) {
|
||||
Log.e(TAG, "setup stroboscope2 " + e.message)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
mIsStroboscopeRunning = false
|
||||
mShouldStroboscopeStop = false
|
||||
isStroboscopeRunning = false
|
||||
shouldStroboscopeStop = false
|
||||
|
||||
if (mShouldEnableFlashlight) {
|
||||
enableFlashlight()
|
||||
@ -112,12 +107,11 @@ class MyCameraImpl(private val mContext: Context) {
|
||||
}
|
||||
|
||||
init {
|
||||
mIsMarshmallow = isMarshmallow
|
||||
mStroboFrequency = 1000
|
||||
mIsMarshmallow = context.isMarshmallowPlus()
|
||||
|
||||
if (mBus == null) {
|
||||
mBus = BusProvider.instance
|
||||
mBus!!.register(this)
|
||||
if (bus == null) {
|
||||
bus = BusProvider.instance
|
||||
bus!!.register(this)
|
||||
}
|
||||
|
||||
handleCameraSetup()
|
||||
@ -129,26 +123,22 @@ class MyCameraImpl(private val mContext: Context) {
|
||||
handleCameraSetup()
|
||||
}
|
||||
|
||||
fun setStroboFrequency(frequency: Int) {
|
||||
mStroboFrequency = frequency
|
||||
}
|
||||
|
||||
fun toggleStroboscope(): Boolean {
|
||||
if (!mIsStroboscopeRunning)
|
||||
if (!isStroboscopeRunning)
|
||||
disableFlashlight()
|
||||
|
||||
if (!Utils.isNougat) {
|
||||
if (mCamera == null) {
|
||||
if (!context.isNougatPlus()) {
|
||||
if (camera == null) {
|
||||
initCamera()
|
||||
}
|
||||
|
||||
if (mCamera == null) {
|
||||
Utils.showToast(mContext, R.string.camera_error)
|
||||
if (camera == null) {
|
||||
context.toast(R.string.camera_error)
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
if (mIsStroboscopeRunning) {
|
||||
if (isStroboscopeRunning) {
|
||||
stopStroboscope()
|
||||
} else {
|
||||
Thread(stroboscope).start()
|
||||
@ -157,7 +147,7 @@ class MyCameraImpl(private val mContext: Context) {
|
||||
}
|
||||
|
||||
fun stopStroboscope() {
|
||||
mShouldStroboscopeStop = true
|
||||
shouldStroboscopeStop = true
|
||||
}
|
||||
|
||||
fun handleCameraSetup() {
|
||||
@ -170,8 +160,8 @@ class MyCameraImpl(private val mContext: Context) {
|
||||
}
|
||||
|
||||
private fun setupMarshmallowCamera() {
|
||||
if (mMarshmallowCamera == null) {
|
||||
mMarshmallowCamera = MarshmallowCamera(mContext)
|
||||
if (marshmallowCamera == null) {
|
||||
marshmallowCamera = MarshmallowCamera(context)
|
||||
}
|
||||
}
|
||||
|
||||
@ -179,20 +169,19 @@ class MyCameraImpl(private val mContext: Context) {
|
||||
if (mIsMarshmallow)
|
||||
return
|
||||
|
||||
if (mCamera == null) {
|
||||
if (camera == null) {
|
||||
initCamera()
|
||||
}
|
||||
}
|
||||
|
||||
private fun initCamera() {
|
||||
try {
|
||||
mCamera = Camera.open()
|
||||
mParams = mCamera!!.parameters
|
||||
camera = Camera.open()
|
||||
mParams = camera!!.parameters
|
||||
mParams!!.flashMode = Camera.Parameters.FLASH_MODE_OFF
|
||||
mCamera!!.parameters = mParams
|
||||
camera!!.parameters = mParams
|
||||
} catch (e: Exception) {
|
||||
Log.e(TAG, "setup mCamera " + e.message)
|
||||
mBus!!.post(Events.CameraUnavailable())
|
||||
bus!!.post(Events.CameraUnavailable())
|
||||
}
|
||||
|
||||
}
|
||||
@ -206,8 +195,8 @@ class MyCameraImpl(private val mContext: Context) {
|
||||
}
|
||||
|
||||
fun enableFlashlight() {
|
||||
mShouldStroboscopeStop = true
|
||||
if (mIsStroboscopeRunning) {
|
||||
shouldStroboscopeStop = true
|
||||
if (isStroboscopeRunning) {
|
||||
mShouldEnableFlashlight = true
|
||||
return
|
||||
}
|
||||
@ -216,21 +205,21 @@ class MyCameraImpl(private val mContext: Context) {
|
||||
if (mIsMarshmallow) {
|
||||
toggleMarshmallowFlashlight(true)
|
||||
} else {
|
||||
if (mCamera == null || mParams == null) {
|
||||
if (camera == null || mParams == null) {
|
||||
return
|
||||
}
|
||||
|
||||
mParams!!.flashMode = Camera.Parameters.FLASH_MODE_TORCH
|
||||
mCamera!!.parameters = mParams
|
||||
mCamera!!.startPreview()
|
||||
camera!!.parameters = mParams
|
||||
camera!!.startPreview()
|
||||
}
|
||||
|
||||
val mainRunnable = Runnable { mBus!!.post(Events.StateChanged(true)) }
|
||||
Handler(mContext.mainLooper).post(mainRunnable)
|
||||
val mainRunnable = Runnable { bus!!.post(Events.StateChanged(true)) }
|
||||
Handler(context.mainLooper).post(mainRunnable)
|
||||
}
|
||||
|
||||
private fun disableFlashlight() {
|
||||
if (mIsStroboscopeRunning) {
|
||||
if (isStroboscopeRunning) {
|
||||
return
|
||||
}
|
||||
|
||||
@ -238,18 +227,18 @@ class MyCameraImpl(private val mContext: Context) {
|
||||
if (mIsMarshmallow) {
|
||||
toggleMarshmallowFlashlight(false)
|
||||
} else {
|
||||
if (mCamera == null || mParams == null) {
|
||||
if (camera == null || mParams == null) {
|
||||
return
|
||||
}
|
||||
|
||||
mParams!!.flashMode = Camera.Parameters.FLASH_MODE_OFF
|
||||
mCamera!!.parameters = mParams
|
||||
camera!!.parameters = mParams
|
||||
}
|
||||
mBus!!.post(Events.StateChanged(false))
|
||||
bus!!.post(Events.StateChanged(false))
|
||||
}
|
||||
|
||||
private fun toggleMarshmallowFlashlight(enable: Boolean) {
|
||||
mMarshmallowCamera!!.toggleMarshmallowFlashlight(mBus!!, enable)
|
||||
marshmallowCamera!!.toggleMarshmallowFlashlight(bus!!, enable)
|
||||
}
|
||||
|
||||
fun releaseCamera() {
|
||||
@ -257,15 +246,11 @@ class MyCameraImpl(private val mContext: Context) {
|
||||
disableFlashlight()
|
||||
}
|
||||
|
||||
if (mCamera != null) {
|
||||
mCamera!!.release()
|
||||
mCamera = null
|
||||
}
|
||||
camera?.release()
|
||||
camera = null
|
||||
|
||||
if (mBus != null) {
|
||||
mBus!!.unregister(this)
|
||||
}
|
||||
bus?.unregister(this)
|
||||
mIsFlashlightOn = false
|
||||
mShouldStroboscopeStop = true
|
||||
shouldStroboscopeStop = true
|
||||
}
|
||||
}
|
||||
|
@ -11,6 +11,7 @@ import android.graphics.Bitmap
|
||||
import android.graphics.Color
|
||||
import android.graphics.PorterDuff
|
||||
import android.widget.RemoteViews
|
||||
import com.simplemobiletools.commons.extensions.toast
|
||||
import com.simplemobiletools.commons.helpers.PREFS_KEY
|
||||
import com.simplemobiletools.flashlight.R
|
||||
import com.simplemobiletools.flashlight.models.Events
|
||||
@ -40,7 +41,7 @@ class MyWidgetProvider : AppWidgetProvider() {
|
||||
|
||||
val prefs = initPrefs(context)
|
||||
val res = context.resources
|
||||
val defaultColor = res.getColor(R.color.colorPrimary)
|
||||
val defaultColor = res.getColor(R.color.color_primary)
|
||||
val selectedColor = prefs.getInt(WIDGET_COLOR, defaultColor)
|
||||
val alpha = Color.alpha(selectedColor)
|
||||
|
||||
@ -94,7 +95,7 @@ class MyWidgetProvider : AppWidgetProvider() {
|
||||
@Subscribe
|
||||
fun cameraUnavailable(event: Events.CameraUnavailable) {
|
||||
if (mContext != null) {
|
||||
Utils.showToast(mContext!!, R.string.camera_error)
|
||||
mContext!!.toast(R.string.camera_error)
|
||||
disableFlashlight()
|
||||
}
|
||||
}
|
||||
|
@ -1,17 +1,11 @@
|
||||
package com.simplemobiletools.flashlight.helpers
|
||||
|
||||
import android.content.Context
|
||||
import android.graphics.Bitmap
|
||||
import android.graphics.Canvas
|
||||
import android.graphics.drawable.Drawable
|
||||
import android.os.Build
|
||||
import android.widget.Toast
|
||||
|
||||
object Utils {
|
||||
|
||||
val isNougat: Boolean
|
||||
get() = Build.VERSION.SDK_INT >= Build.VERSION_CODES.N
|
||||
|
||||
fun drawableToBitmap(drawable: Drawable): Bitmap {
|
||||
val width = drawable.intrinsicWidth
|
||||
val height = drawable.intrinsicHeight
|
||||
@ -21,8 +15,4 @@ object Utils {
|
||||
drawable.draw(canvas)
|
||||
return mutableBitmap
|
||||
}
|
||||
|
||||
fun showToast(context: Context, resId: Int) {
|
||||
Toast.makeText(context, context.resources.getString(resId), Toast.LENGTH_SHORT).show()
|
||||
}
|
||||
}
|
||||
|
@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<FrameLayout
|
||||
android:id="@+id/display_holder"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:id="@+id/display_holder"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:background="@android:color/white"/>
|
||||
|
@ -12,28 +12,41 @@
|
||||
android:orientation="vertical">
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/settings_bright_display_holder"
|
||||
android:id="@+id/settings_customize_colors_holder"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/settings_padding"
|
||||
android:layout_marginTop="@dimen/medium_margin"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:padding="@dimen/activity_margin">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/settings_bright_display_label"
|
||||
<com.simplemobiletools.commons.views.MyTextView
|
||||
android:id="@+id/settings_customize_colors"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_centerVertical="true"
|
||||
android:paddingLeft="@dimen/settings_padding"
|
||||
android:text="@string/bright_display"/>
|
||||
android:paddingLeft="@dimen/medium_margin"
|
||||
android:paddingStart="@dimen/medium_margin"
|
||||
android:text="@string/customize_colors"/>
|
||||
|
||||
<android.support.v7.widget.SwitchCompat
|
||||
</RelativeLayout>
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/settings_bright_display_holder"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/medium_margin"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:padding="@dimen/activity_margin">
|
||||
|
||||
<com.simplemobiletools.commons.views.MySwitchCompat
|
||||
android:id="@+id/settings_bright_display"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignParentRight="true"
|
||||
android:background="@null"
|
||||
android:clickable="false"/>
|
||||
android:clickable="false"
|
||||
android:paddingLeft="@dimen/medium_margin"
|
||||
android:paddingStart="@dimen/medium_margin"
|
||||
android:text="@string/bright_display"/>
|
||||
|
||||
</RelativeLayout>
|
||||
|
||||
@ -41,25 +54,19 @@
|
||||
android:id="@+id/settings_stroboscope_holder"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/settings_padding"
|
||||
android:layout_marginTop="@dimen/medium_margin"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:padding="@dimen/activity_margin">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/settings_stroboscope_label"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_centerVertical="true"
|
||||
android:paddingLeft="@dimen/settings_padding"
|
||||
android:text="@string/show_stroboscope"/>
|
||||
|
||||
<android.support.v7.widget.SwitchCompat
|
||||
<com.simplemobiletools.commons.views.MySwitchCompat
|
||||
android:id="@+id/settings_stroboscope"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignParentRight="true"
|
||||
android:background="@null"
|
||||
android:clickable="false"/>
|
||||
android:clickable="false"
|
||||
android:paddingLeft="@dimen/medium_margin"
|
||||
android:paddingStart="@dimen/medium_margin"
|
||||
android:text="@string/show_stroboscope"/>
|
||||
|
||||
</RelativeLayout>
|
||||
</LinearLayout>
|
||||
|
@ -56,7 +56,7 @@
|
||||
android:paddingLeft="@dimen/activity_margin"
|
||||
android:paddingRight="@dimen/activity_margin"
|
||||
android:text="@string/ok"
|
||||
android:textColor="@color/colorPrimary"
|
||||
android:textSize="@dimen/config_text_size"/>
|
||||
android:textColor="@color/color_primary"
|
||||
android:textSize="@dimen/big_text_size"/>
|
||||
|
||||
</RelativeLayout>
|
||||
|
@ -2,34 +2,12 @@
|
||||
<string name="app_name">Schlichte Taschenlampe</string>
|
||||
<string name="app_launcher_name">Taschenlampe</string>
|
||||
<string name="camera_error">Beanspruchen der Kamera fehlgeschlagen</string>
|
||||
<string name="ok">OK</string>
|
||||
<string name="camera_permission">Kamera-Berechtigung ist für den Stroboskopeffekt erforderlich</string>
|
||||
|
||||
<!-- Settings -->
|
||||
<string name="settings">Einstellungen</string>
|
||||
<string name="dark_theme">Dunkles Design</string>
|
||||
<string name="bright_display">Zeige Button für helles Display</string>
|
||||
<string name="show_stroboscope">Zeige Button für Stroboskop</string>
|
||||
|
||||
<!-- About -->
|
||||
<string name="about">Über</string>
|
||||
<string name="website">Weitere einfache Apps und Quellcode findest du auf:\nhttp://simplemobiletools.com</string>
|
||||
<string name="email_label">Sende Vorschläge und Feedback an:</string>
|
||||
<string name="third_party_licences_underlined"><u>Drittanbieterlizenzen</u></string>
|
||||
<string name="invite_friends_underlined"><u>Freunde einladen</u></string>
|
||||
<string name="share_text">Hey, wirf mal einen Blick auf %1$s: %2$s</string>
|
||||
<string name="invite_via">Einladen via</string>
|
||||
<string name="rate_us_underlined"><u>Bewerte uns im Play Store</u></string>
|
||||
<string name="follow_us">Folge uns:</string>
|
||||
<string name="copyright">v %1$s\nCopyright © Simple Mobile Tools %2$d</string>
|
||||
|
||||
<!--License-->
|
||||
<string name="notice">Diese App nutzt die folgenden Drittanbieterbibliotheken, die mein Leben einfacher machen. Danke.</string>
|
||||
<string name="third_party_licences">Drittanbieterlizenzen</string>
|
||||
<string name="butterknife_title">Butter Knife (View Injector)</string>
|
||||
<string name="ambilwarna_title"><u>AmbilWarna (Color Picker)</u></string>
|
||||
<string name="otto_title"><u>Otto (Event Bus)</u></string>
|
||||
|
||||
<!-- Strings displayed only on Google Playstore. Optional, but good to have -->
|
||||
<string name="app_short_description">Eine schlichte Taschenlampe ohne Werbung.</string>
|
||||
<string name="app_long_description">
|
||||
|
@ -2,40 +2,13 @@
|
||||
<string name="app_name">Simple Flashlight</string>
|
||||
<string name="app_launcher_name">Linterna</string>
|
||||
<string name="camera_error">Ha fallado el acceso a la cámara</string>
|
||||
<string name="ok">Ok</string>
|
||||
<string name="camera_permission">El permiso de acceso a la cámara es necesario para un apropiado efecto estroboscópico</string>
|
||||
|
||||
<!-- Settings -->
|
||||
<string name="settings">Opciones</string>
|
||||
<string name="dark_theme">Tema oscuro</string>
|
||||
<string name="bright_display">Mostrar un botón de brillo</string>
|
||||
<string name="show_stroboscope">Mostrar un botón de estroboscopio</string>
|
||||
|
||||
<!-- About -->
|
||||
<string name="about">Acerca de Simple Flashlight</string>
|
||||
<string name="website">Más aplicaciones simples y su código fuente en:\nhttp://simplemobiletools.com</string>
|
||||
<string name="email_label">Envíe sus comentarios y sugerencias a:</string>
|
||||
<string name="third_party_licences_underlined"><u>Licencias de terceros</u></string>
|
||||
<string name="invite_friends_underlined"><u>Invitar a amigos</u></string>
|
||||
<string name="share_text">Hola, venga y échele un vistazo a %1$s en %2$s</string>
|
||||
<string name="invite_via">Invitar vía</string>
|
||||
<string name="rate_us_underlined"><u>Evalúenos en Google Play Store</u></string>
|
||||
<string name="follow_us">Síganos:</string>
|
||||
<string name="copyright">v %1$s\nCopyright © Simple Mobile Tools %2$d</string>
|
||||
|
||||
<!--License-->
|
||||
<string name="notice">Esta aplicación usa las siguientes librerías de terceros para hacerme la vida más fácil. Gracias.</string>
|
||||
<string name="third_party_licences">Licencias de terceros</string>
|
||||
<string name="butterknife_title"><u>Butter Knife (Inyector de vistas)</u></string>
|
||||
<string name="ambilwarna_title"><u>AmbilWarna (Selector de colores)</u></string>
|
||||
<string name="otto_title"><u>Otto (Canal de eventos)</u></string>
|
||||
|
||||
<!-- Strings displayed only on Google Playstore. Optional, but good to have -->
|
||||
<string name="app_short_description">Una simple linterna sin anuncios.</string>
|
||||
<string name="app_long_description">
|
||||
Una sencilla linterna con brillo extra de pantalla y un personalizable estroboscopio. Si la enciende a través de la aplicación (no del widget), prevendrá que el dispositivo se duerma.
|
||||
|
||||
|
||||
Viene con un widget 1x1 con color personalizable.
|
||||
|
||||
No contiene anuncios ni permisos innecesarios. Es completamente OpenSource y además provee un tema oscuro.
|
||||
|
@ -2,40 +2,17 @@
|
||||
<string name="app_name">Simple Flashlight</string>
|
||||
<string name="app_launcher_name">Flashlight</string>
|
||||
<string name="camera_error">Rilevamento fotocamera fallito</string>
|
||||
<string name="ok">OK</string>
|
||||
<string name="camera_permission">Camera permission is necessary for proper stroboscope effect</string>
|
||||
|
||||
<!-- Settings -->
|
||||
<string name="settings">Impostazioni</string>
|
||||
<string name="dark_theme">Tema scuro</string>
|
||||
<string name="bright_display">Mostra un pulsante per schermo luminoso</string>
|
||||
<string name="show_stroboscope">Show a stroboscope button</string>
|
||||
|
||||
<!-- About -->
|
||||
<string name="about">Informazioni</string>
|
||||
<string name="website">Altre semplici app e codici sorgenti in:\nhttp://simplemobiletools.com</string>
|
||||
<string name="email_label">Invia la tua opinione o i tuoi suggerimenti a:</string>
|
||||
<string name="third_party_licences_underlined"><u>Licenze di terze parti</u></string>
|
||||
<string name="invite_friends_underlined"><u>Invite friends</u></string>
|
||||
<string name="share_text">Hey, come check out %1$s at %2$s</string>
|
||||
<string name="invite_via">Invite via</string>
|
||||
<string name="rate_us_underlined"><u>Dacci un voto sul Play Store</u></string>
|
||||
<string name="follow_us">Seguici:</string>
|
||||
<string name="copyright">v %1$s\nCopyright © Simple Mobile Tools %2$d</string>
|
||||
|
||||
<!--License-->
|
||||
<string name="notice">Questa app usa le seguenti librerie di terze parti per semplificarmi la vita. Grazie.</string>
|
||||
<string name="third_party_licences">Licenze di terze parti</string>
|
||||
<string name="butterknife_title">Butter Knife (view injector)</string>
|
||||
<string name="ambilwarna_title"><u>AmbilWarna (color picker)</u></string>
|
||||
<string name="otto_title"><u>Otto (event bus)</u></string>
|
||||
|
||||
<!-- Strings displayed only on Google Playstore. Optional, but good to have -->
|
||||
<string name="app_short_description">A simple flashlight without ads.</string>
|
||||
<string name="app_long_description">
|
||||
A clean flashlight with an extra bright display and customizable stroboscope. If turned on via the app (not widget), it will prevent the device from falling asleep.
|
||||
|
||||
|
||||
Comes with a 1x1 widget with customizable color.
|
||||
|
||||
Contains no ads or unnecessary permissions. It is fully opensource, provides a Dark theme too.
|
||||
|
@ -2,40 +2,17 @@
|
||||
<string name="app_name">シンプル フラッシュライト</string>
|
||||
<string name="app_launcher_name">フラッシュライト</string>
|
||||
<string name="camera_error">カメラの取得に失敗しました</string>
|
||||
<string name="ok">OK</string>
|
||||
<string name="camera_permission">適切なストロボ効果のために、カメラのアクセス許可が必要です</string>
|
||||
|
||||
<!-- Settings -->
|
||||
<string name="settings">設定</string>
|
||||
<string name="dark_theme">ダークテーマ</string>
|
||||
<string name="bright_display">明るく表示ボタンを表示</string>
|
||||
<string name="show_stroboscope">ストロボボタンを表示</string>
|
||||
|
||||
<!-- About -->
|
||||
<string name="about">アプリについて</string>
|
||||
<string name="website">もっとシンプルなアプリとソースコード:\nhttp://simplemobiletools.com</string>
|
||||
<string name="email_label">ご意見やご提案を送信してください:</string>
|
||||
<string name="third_party_licences_underlined"><u>サードパーティー ライセンス</u></string>
|
||||
<string name="invite_friends_underlined"><u>友達を招待</u></string>
|
||||
<string name="share_text">%2$s で %1$s を確認してください</string>
|
||||
<string name="invite_via">招待...</string>
|
||||
<string name="rate_us_underlined"><u>Play ストアで評価してください</u></string>
|
||||
<string name="follow_us">フォローしてください:</string>
|
||||
<string name="copyright">v %1$s\nCopyright © Simple Mobile Tools %2$d</string>
|
||||
|
||||
<!--License-->
|
||||
<string name="notice">このアプリは、私の暮らしにゆとりを持たせるために、次のサードパーティのライブラリーを使用しています。 ありがとうございます。</string>
|
||||
<string name="third_party_licences">サードパーティー ライセンス</string>
|
||||
<string name="butterknife_title">Butter Knife (ビュー インジェクター)</string>
|
||||
<string name="ambilwarna_title"><u>AmbilWarna (カラー ピッカー)</u></string>
|
||||
<string name="otto_title"><u>Otto (イベント バス)</u></string>
|
||||
|
||||
<!-- Strings displayed only on Google Playstore. Optional, but good to have -->
|
||||
<string name="app_short_description">広告のないシンプルな懐中電灯です。</string>
|
||||
<string name="app_long_description">
|
||||
特別に明るく表示とカスタマイズ可能なストロボを備えたシンプルな懐中電灯です。 (ウィジェットではなく)アプリでオンにすると、デバイスがスリープ状態にならないようになります。
|
||||
|
||||
|
||||
カスタマイズ可能な色の 1x1 ウィジェットが付属しています。
|
||||
|
||||
広告や不要なアクセス許可は含まれていません。 完全にオープンソースで、ダークテーマも提供しています。
|
||||
|
@ -2,40 +2,17 @@
|
||||
<string name="app_name">Simple Flashlight</string>
|
||||
<string name="app_launcher_name">Lanterna</string>
|
||||
<string name="camera_error">Falha ao obter a câmara</string>
|
||||
<string name="ok">OK</string>
|
||||
<string name="camera_permission">A permissão da câmara é necessária para utilizar o efeito estroboscópico</string>
|
||||
|
||||
<!-- Settings -->
|
||||
<string name="settings">Definições</string>
|
||||
<string name="dark_theme">Tema escuro</string>
|
||||
<string name="bright_display">Mostrar botão para iluminar o ecrã</string>
|
||||
<string name="show_stroboscope">Mostrar botão de estroboscópio</string>
|
||||
|
||||
<!-- About -->
|
||||
<string name="about">Acerca</string>
|
||||
<string name="website">Mais aplicações Simple e código fonte em:\nhttp://simplemobiletools.com</string>
|
||||
<string name="email_label">Envie os seus comentários ou sugestões para:</string>
|
||||
<string name="third_party_licences_underlined"><u>Licenças de terceiros</u></string>
|
||||
<string name="invite_friends_underlined"><u>Convidar amigos</u></string>
|
||||
<string name="share_text">Olá, experimenta %1$s em %2$s</string>
|
||||
<string name="invite_via">Convidar via</string>
|
||||
<string name="rate_us_underlined"><u>Avalie-nos na Play Store</u></string>
|
||||
<string name="follow_us">Siga-nos:</string>
|
||||
<string name="copyright">V %1$s\nCopyright © Simple Mobile Tools %2$d</string>
|
||||
|
||||
<!--License-->
|
||||
<string name="notice">Esta aplicação usa as seguintes bibliotecas de terceiros para facilitar a minha vida. Obrigado.</string>
|
||||
<string name="third_party_licences">Licenças de terceiros</string>
|
||||
<string name="butterknife_title">Butter Knife (injetor de vistas)</string>
|
||||
<string name="ambilwarna_title"><u>AmbilWarna (selector de sores)</u></string>
|
||||
<string name="otto_title"><u>Otto (canal de eventos)</u></string>
|
||||
|
||||
<!-- Strings displayed only on Google Playstore. Optional, but good to have -->
|
||||
<string name="app_short_description">Um lanterna básica.</string>
|
||||
<string name="app_long_description">
|
||||
Uma lanterna simples com um brilho extra e um estroboscópio personalizável. Pode ser ativada na aplicação (não no widget), impedindo o adormecimento do dispositivo.
|
||||
|
||||
|
||||
Disponibiliza um widget 1x1 com uma cor personalizável.
|
||||
|
||||
Não contém anúncios nem permissões desnecessárias. Disponibiliza um tema escuro e é totalmente \'open source\'.
|
||||
|
@ -2,40 +2,17 @@
|
||||
<string name="app_name">Simple Flashlight</string>
|
||||
<string name="app_launcher_name">Ficklampa</string>
|
||||
<string name="camera_error">Det gick inte att komma åt kameran</string>
|
||||
<string name="ok">OK</string>
|
||||
<string name="camera_permission">Kamerabehörigheten behövs för en riktig stroboskopeffekt</string>
|
||||
|
||||
<!-- Settings -->
|
||||
<string name="settings">Inställningar</string>
|
||||
<string name="dark_theme">Mörkt tema</string>
|
||||
<string name="bright_display">Visa en knapp för ljus skärm</string>
|
||||
<string name="show_stroboscope">Visa en stroboskopknapp</string>
|
||||
|
||||
<!-- About -->
|
||||
<string name="about">Om</string>
|
||||
<string name="website">Fler enkla appar och källkod här:\nhttp://simplemobiletools.com</string>
|
||||
<string name="email_label">Skicka feedback och förslag till:</string>
|
||||
<string name="third_party_licences_underlined"><u>Tredjepartslicenser</u></string>
|
||||
<string name="invite_friends_underlined"><u>Bjud in vänner</u></string>
|
||||
<string name="share_text">Hej, läs om %1$s på %2$s</string>
|
||||
<string name="invite_via">Bjud in via</string>
|
||||
<string name="rate_us_underlined"><u>Betygsätt oss i Play Butiken</u></string>
|
||||
<string name="follow_us">Följ oss:</string>
|
||||
<string name="copyright">v %1$s\nCopyright © Simple Mobile Tools %2$d</string>
|
||||
|
||||
<!--License-->
|
||||
<string name="notice">Denna app använder följande tredjepartsbibliotek för att göra mitt liv enklare. Tack.</string>
|
||||
<string name="third_party_licences">Tredjepartslicenser</string>
|
||||
<string name="butterknife_title"><u>Butter Knife (vyinjektor)</u></string>
|
||||
<string name="ambilwarna_title"><u>AmbilWarna (färgväljare)</u></string>
|
||||
<string name="otto_title"><u>Otto (händelsebuss)</u></string>
|
||||
|
||||
<!-- Strings displayed only on Google Playstore. Optional, but good to have -->
|
||||
<string name="app_short_description">En enkel ficklampa utan reklam.</string>
|
||||
<string name="app_long_description">
|
||||
En ren ficklampa med en extra ljus skärm och ett anpassningsbart stroboskop. Om den slås på via appen (inte widgeten), hindrar den enheten från att försättas i viloläge.
|
||||
|
||||
|
||||
Har en 1x1-widget med anpassningsbar färg.
|
||||
|
||||
Innehåller ingen reklam eller onödiga behörigheter. Den har helt öppen källkod och har även ett Mörkt tema.
|
||||
|
@ -1,6 +0,0 @@
|
||||
<resources>
|
||||
<dimen name="social_padding">12dp</dimen>
|
||||
<dimen name="social_logo">50dp</dimen>
|
||||
|
||||
<dimen name="normal_text_size">18sp</dimen>
|
||||
</resources>
|
@ -1,8 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<color name="colorPrimary">#fff68630</color>
|
||||
<color name="colorPrimaryDark">#ffe27725</color>
|
||||
<color name="colorAccent">@color/colorPrimary</color>
|
||||
<color name="translucent_white">#eeffffff</color>
|
||||
<color name="translucent_black">#88000000</color>
|
||||
</resources>
|
||||
|
@ -1,13 +1,6 @@
|
||||
<resources>
|
||||
<dimen name="activity_margin">16dp</dimen>
|
||||
<dimen name="buttons_margin">30dp</dimen>
|
||||
<dimen name="social_padding">8dp</dimen>
|
||||
<dimen name="social_logo">40dp</dimen>
|
||||
<dimen name="settings_padding">8dp</dimen>
|
||||
<dimen name="seekbar_width">250dp</dimen>
|
||||
<dimen name="seekbar_vertical_padding">6dp</dimen>
|
||||
<dimen name="main_button_size">150dp</dimen>
|
||||
|
||||
<dimen name="normal_text_size">14sp</dimen>
|
||||
<dimen name="config_text_size">18sp</dimen>
|
||||
</resources>
|
||||
|
@ -2,50 +2,20 @@
|
||||
<string name="app_name">Simple Flashlight</string>
|
||||
<string name="app_launcher_name">Flashlight</string>
|
||||
<string name="camera_error">Obtaining the camera failed</string>
|
||||
<string name="ok">OK</string>
|
||||
<string name="camera_permission">Camera permission is necessary for proper stroboscope effect</string>
|
||||
|
||||
<!-- Settings -->
|
||||
<string name="settings">Settings</string>
|
||||
<string name="dark_theme">Dark theme</string>
|
||||
<string name="bright_display">Show a bright display button</string>
|
||||
<string name="show_stroboscope">Show a stroboscope button</string>
|
||||
|
||||
<!-- About -->
|
||||
<string name="about">About</string>
|
||||
<string name="website">More simple apps and source code at:\nhttp://simplemobiletools.com</string>
|
||||
<string name="email_label">Send your feedback or suggestions to:</string>
|
||||
<string name="email" translatable="false">hello@simplemobiletools.com</string>
|
||||
<string name="third_party_licences_underlined"><u>Third party licenses</u></string>
|
||||
<string name="invite_friends_underlined"><u>Invite friends</u></string>
|
||||
<string name="share_text">Hey, come check out %1$s at %2$s</string>
|
||||
<string name="invite_via">Invite via</string>
|
||||
<string name="rate_us_underlined"><u>Rate us in the Play Store</u></string>
|
||||
<string name="follow_us">Follow us:</string>
|
||||
<string name="copyright">v %1$s\nCopyright © Simple Mobile Tools %2$d</string>
|
||||
|
||||
<!--License-->
|
||||
<string name="notice">This app uses the following third party libraries to make my life easier. Thank you.</string>
|
||||
<string name="third_party_licences">Third party licenses</string>
|
||||
<string name="butterknife_title">Butter Knife (view injector)</string>
|
||||
<string name="butterknife_text" translatable="false">Copyright 2013 Jake Wharton\n\nLicensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at\n\nhttp://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS,WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.</string>
|
||||
<string name="butterknife_url" translatable="false">https://github.com/JakeWharton/butterknife</string>
|
||||
<string name="ambilwarna_title"><u>AmbilWarna (color picker)</u></string>
|
||||
<string name="ambilwarna_text" translatable="false">Copyright 2009-2015 Yuku\n\nLicensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at\n\nhttp://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.</string>
|
||||
<string name="ambilwarna_url" translatable="false">https://github.com/yukuku/ambilwarna</string>
|
||||
<string name="otto_title"><u>Otto (event bus)</u></string>
|
||||
<string name="otto_text" translatable="false">Copyright 2012 Square, Inc.\nCopyright 2010 Google, Inc.\n\nLicensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at\n\nhttp://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.</string>
|
||||
<string name="otto_url" translatable="false">https://github.com/square/otto</string>
|
||||
|
||||
<!-- Strings displayed only on Google Playstore. Optional, but good to have -->
|
||||
<string name="app_short_description">A simple flashlight without ads.</string>
|
||||
<string name="app_long_description">
|
||||
A clean flashlight with an extra bright display and customizable stroboscope. If turned on via the app (not widget), it will prevent the device from falling asleep.
|
||||
|
||||
|
||||
Comes with a 1x1 widget with customizable color.
|
||||
|
||||
Contains no ads or unnecessary permissions. It is fully opensource, provides a Dark theme too.
|
||||
Contains no ads or unnecessary permissions. It is fully opensource, provides customizable colors.
|
||||
|
||||
This app is just one piece of a bigger series of apps. You can find the rest of them at http://www.simplemobiletools.com
|
||||
</string>
|
||||
|
@ -1,38 +1,5 @@
|
||||
<resources>
|
||||
|
||||
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
|
||||
<item name="colorPrimary">@color/colorPrimary</item>
|
||||
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
|
||||
<item name="colorAccent">@color/colorAccent</item>
|
||||
<item name="actionBarStyle">@style/AppTheme.ActionBarStyle</item>
|
||||
<item name="android:textSize">@dimen/normal_text_size</item>
|
||||
</style>
|
||||
<style name="AppTheme" parent="AppTheme.Base"/>
|
||||
|
||||
<style name="AppTheme.Dark" parent="Theme.AppCompat">
|
||||
<item name="colorPrimary">@color/colorPrimary</item>
|
||||
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
|
||||
<item name="colorAccent">@color/colorAccent</item>
|
||||
<item name="actionBarStyle">@style/AppTheme.ActionBarStyle</item>
|
||||
<item name="android:textSize">@dimen/normal_text_size</item>
|
||||
<item name="android:windowBackground">@android:color/black</item>
|
||||
</style>
|
||||
|
||||
<style name="BlackSplashScreen.Dark" parent="AppTheme.Dark">
|
||||
<item name="android:windowBackground">@null</item>
|
||||
</style>
|
||||
|
||||
<style name="MyWidgetConfigTheme" parent="@style/AppTheme">
|
||||
<item name="android:windowBackground">@android:color/transparent</item>
|
||||
<item name="android:windowShowWallpaper">true</item>
|
||||
</style>
|
||||
|
||||
<style name="AppTheme.ActionBarStyle" parent="@style/Base.Widget.AppCompat.ActionBar">
|
||||
<item name="background">@color/colorPrimary</item>
|
||||
<item name="titleTextStyle">@style/AppTheme.ActionBar.TitleTextStyle</item>
|
||||
</style>
|
||||
|
||||
<style name="AppTheme.ActionBar.TitleTextStyle" parent="@android:style/TextAppearance.Holo.Widget.ActionBar.Title">
|
||||
<item name="android:fontFamily">sans-serif</item>
|
||||
<item name="android:textSize">20sp</item>
|
||||
</style>
|
||||
</resources>
|
||||
|
@ -1,7 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:configure="com.simplemobiletools.flashlight.activities.WidgetConfigureActivity"
|
||||
android:initialLayout="@layout/widget"
|
||||
android:minHeight="40dp"
|
||||
android:minWidth="40dp"
|
||||
android:previewImage="@drawable/circles_small"/>
|
||||
<appwidget-provider
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:configure="com.simplemobiletools.flashlight.activities.WidgetConfigureActivity"
|
||||
android:initialLayout="@layout/widget"
|
||||
android:minHeight="40dp"
|
||||
android:minWidth="40dp"
|
||||
android:previewImage="@drawable/circles_small"/>
|
||||
|
@ -6,7 +6,6 @@ buildscript {
|
||||
}
|
||||
dependencies {
|
||||
classpath 'com.android.tools.build:gradle:2.3.3'
|
||||
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
|
||||
|
||||
// NOTE: Do not place your application dependencies here; they belong
|
||||
// in the individual module build.gradle files
|
||||
|
Loading…
x
Reference in New Issue
Block a user