diff --git a/app/build.gradle b/app/build.gradle index 51883604a..6d8f466bd 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -48,6 +48,8 @@ spotless { dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:${versions.kotlin_version}" + kapt "androidx.databinding:compiler:3.2.0-alpha11" + //Moshi implementation "com.squareup.moshi:moshi-kotlin:${versions.moshi_version}" kapt "com.squareup.moshi:moshi-kotlin-codegen:${versions.moshi_version}" diff --git a/app/src/main/java/org/fossasia/badgemagic/BadgeMagicApp.kt b/app/src/main/java/org/fossasia/badgemagic/BadgeMagicApp.kt index 7aa0dc9c5..9eb083960 100644 --- a/app/src/main/java/org/fossasia/badgemagic/BadgeMagicApp.kt +++ b/app/src/main/java/org/fossasia/badgemagic/BadgeMagicApp.kt @@ -2,7 +2,11 @@ package org.fossasia.badgemagic import android.app.Application import android.content.Context -import org.fossasia.badgemagic.di.appModules +import android.content.res.Configuration +import org.fossasia.badgemagic.di.singletonModules +import org.fossasia.badgemagic.di.utilModules +import org.fossasia.badgemagic.di.viewModelModules +import org.fossasia.badgemagic.util.LocaleManager import org.koin.android.ext.koin.androidContext import org.koin.android.ext.koin.androidLogger import org.koin.core.context.startKoin @@ -23,9 +27,11 @@ class BadgeMagicApp : Application() { startKoin { androidLogger() androidContext(applicationContext) - modules( - appModules - ) + modules(listOf( + singletonModules, + utilModules, + viewModelModules + )) } initLogger() @@ -36,4 +42,13 @@ class BadgeMagicApp : Application() { Timber.plant(Timber.DebugTree()) } } + + override fun attachBaseContext(base: Context?) { + super.attachBaseContext(LocaleManager.setLocale(base)) + } + + override fun onConfigurationChanged(newConfig: Configuration) { + super.onConfigurationChanged(newConfig) + LocaleManager.setLocale(this) + } } diff --git a/app/src/main/java/org/fossasia/badgemagic/bindings/SettingsViewBindings.kt b/app/src/main/java/org/fossasia/badgemagic/bindings/SettingsViewBindings.kt new file mode 100644 index 000000000..4a06dea9a --- /dev/null +++ b/app/src/main/java/org/fossasia/badgemagic/bindings/SettingsViewBindings.kt @@ -0,0 +1,23 @@ +package org.fossasia.badgemagic.bindings + +import android.view.View +import android.widget.AdapterView +import android.widget.ArrayAdapter +import androidx.appcompat.widget.AppCompatSpinner +import androidx.databinding.BindingAdapter +import org.fossasia.badgemagic.viewmodels.SettingsViewModel + +@BindingAdapter("createAdapterFrom") +fun setSpinnerAdapter(spinner: AppCompatSpinner, viewModel: SettingsViewModel) { + val list: MutableList = viewModel.languageList.get() ?: mutableListOf() + spinner.adapter = ArrayAdapter(spinner.context, android.R.layout.simple_spinner_dropdown_item, list) + spinner.setSelection(viewModel.getSelectedSpinnerLanguage(), false) + spinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { + override fun onNothingSelected(parent: AdapterView<*>?) { + } + + override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) { + viewModel.setSelectedSpinnerLangauge(position) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/org/fossasia/badgemagic/data/Language.kt b/app/src/main/java/org/fossasia/badgemagic/data/Language.kt new file mode 100644 index 000000000..5a8548a5c --- /dev/null +++ b/app/src/main/java/org/fossasia/badgemagic/data/Language.kt @@ -0,0 +1,8 @@ +package org.fossasia.badgemagic.data + +import java.util.Locale + +enum class Language(val locale: Locale) { + ENGLISH(Locale.ENGLISH), + CHINESE(Locale.CHINA), +} \ No newline at end of file diff --git a/app/src/main/java/org/fossasia/badgemagic/database/ClipArtService.kt b/app/src/main/java/org/fossasia/badgemagic/database/ClipArtService.kt index 75ffd3253..69d4f7d78 100644 --- a/app/src/main/java/org/fossasia/badgemagic/database/ClipArtService.kt +++ b/app/src/main/java/org/fossasia/badgemagic/database/ClipArtService.kt @@ -6,10 +6,12 @@ import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import org.fossasia.badgemagic.R import org.fossasia.badgemagic.util.Resource +import org.koin.core.KoinComponent +import org.koin.core.inject -class ClipArtService { +class ClipArtService : KoinComponent { private val clipArts = MutableLiveData>() - private val resourceHelper = Resource() + private val resourceHelper: Resource by inject() init { val tempSparseArray = SparseArray() diff --git a/app/src/main/java/org/fossasia/badgemagic/di/Modules.kt b/app/src/main/java/org/fossasia/badgemagic/di/Modules.kt index 1cfe52402..5f9d200ee 100644 --- a/app/src/main/java/org/fossasia/badgemagic/di/Modules.kt +++ b/app/src/main/java/org/fossasia/badgemagic/di/Modules.kt @@ -2,17 +2,29 @@ package org.fossasia.badgemagic.di import org.fossasia.badgemagic.database.ClipArtService import org.fossasia.badgemagic.database.StorageFilesService +import org.fossasia.badgemagic.util.PreferenceUtils +import org.fossasia.badgemagic.util.Resource import org.fossasia.badgemagic.viewmodels.FilesViewModel import org.fossasia.badgemagic.viewmodels.TextArtViewModel +import org.fossasia.badgemagic.viewmodels.SettingsViewModel import org.fossasia.badgemagic.viewmodels.DrawViewModel +import org.koin.android.ext.koin.androidContext import org.koin.androidx.viewmodel.dsl.viewModel import org.koin.dsl.module -val appModules = module { - single { ClipArtService() } - single { StorageFilesService() } - +val viewModelModules = module { viewModel { TextArtViewModel(get(), get()) } viewModel { FilesViewModel(get()) } + viewModel { SettingsViewModel(get()) } viewModel { DrawViewModel() } +} + +val singletonModules = module { + single { ClipArtService() } + single { StorageFilesService() } +} + +val utilModules = module { + single { PreferenceUtils(androidContext()) } + single { Resource(androidContext()) } } \ No newline at end of file diff --git a/app/src/main/java/org/fossasia/badgemagic/ui/DrawerActivity.kt b/app/src/main/java/org/fossasia/badgemagic/ui/DrawerActivity.kt index ff17faa29..8962a3c5d 100644 --- a/app/src/main/java/org/fossasia/badgemagic/ui/DrawerActivity.kt +++ b/app/src/main/java/org/fossasia/badgemagic/ui/DrawerActivity.kt @@ -16,7 +16,6 @@ import androidx.appcompat.app.ActionBarDrawerToggle import android.view.MenuItem import androidx.drawerlayout.widget.DrawerLayout import com.google.android.material.navigation.NavigationView -import androidx.appcompat.app.AppCompatActivity import android.view.Menu import android.view.View import android.widget.Toast @@ -26,16 +25,18 @@ import kotlinx.android.synthetic.main.activity_drawer.* import kotlinx.android.synthetic.main.app_bar_drawer.* import org.fossasia.badgemagic.R import org.fossasia.badgemagic.core.android.log.Timber -import org.fossasia.badgemagic.ui.fragments.base.BaseFragment +import org.fossasia.badgemagic.ui.base.BaseFragment import org.fossasia.badgemagic.viewmodels.FilesViewModel import org.fossasia.badgemagic.ui.fragments.AboutFragment import org.fossasia.badgemagic.ui.fragments.SavedBadgesFragment +import org.fossasia.badgemagic.ui.fragments.SettingsFragment import org.fossasia.badgemagic.ui.fragments.TextArtFragment +import org.fossasia.badgemagic.ui.base.BaseActivity import org.fossasia.badgemagic.util.SendingUtils import org.fossasia.badgemagic.util.StorageUtils import org.koin.androidx.viewmodel.ext.android.viewModel -class DrawerActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelectedListener { +class DrawerActivity : BaseActivity(), NavigationView.OnNavigationItemSelectedListener { companion object { private const val PICK_FILE_RESULT_CODE = 2 @@ -86,6 +87,10 @@ class DrawerActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelec switchFragment(SavedBadgesFragment.newInstance()) showMenu?.setGroupVisible(R.id.saved_group, true) } + R.id.settings -> { + switchFragment(SettingsFragment.newInstance()) + showMenu?.setGroupVisible(R.id.saved_group, false) + } R.id.feedback -> { startActivity(Intent(Intent.ACTION_VIEW, Uri.parse("https://github.com/fossasia/badge-magic-android/issues"))) } diff --git a/app/src/main/java/org/fossasia/badgemagic/ui/base/BaseActivity.kt b/app/src/main/java/org/fossasia/badgemagic/ui/base/BaseActivity.kt new file mode 100644 index 000000000..5d4ab9577 --- /dev/null +++ b/app/src/main/java/org/fossasia/badgemagic/ui/base/BaseActivity.kt @@ -0,0 +1,11 @@ +package org.fossasia.badgemagic.ui.base + +import android.content.Context +import androidx.appcompat.app.AppCompatActivity +import org.fossasia.badgemagic.util.LocaleManager + +abstract class BaseActivity : AppCompatActivity() { + override fun attachBaseContext(base: Context?) { + super.attachBaseContext(LocaleManager.setLocale(base)) + } +} \ No newline at end of file diff --git a/app/src/main/java/org/fossasia/badgemagic/ui/fragments/base/BaseFragment.kt b/app/src/main/java/org/fossasia/badgemagic/ui/base/BaseFragment.kt similarity index 88% rename from app/src/main/java/org/fossasia/badgemagic/ui/fragments/base/BaseFragment.kt rename to app/src/main/java/org/fossasia/badgemagic/ui/base/BaseFragment.kt index 36fab8be1..6f2a33fb1 100644 --- a/app/src/main/java/org/fossasia/badgemagic/ui/fragments/base/BaseFragment.kt +++ b/app/src/main/java/org/fossasia/badgemagic/ui/base/BaseFragment.kt @@ -1,4 +1,4 @@ -package org.fossasia.badgemagic.ui.fragments.base +package org.fossasia.badgemagic.ui.base import androidx.fragment.app.Fragment import org.fossasia.badgemagic.data.device.model.DataToSend diff --git a/app/src/main/java/org/fossasia/badgemagic/ui/fragments/AboutFragment.kt b/app/src/main/java/org/fossasia/badgemagic/ui/fragments/AboutFragment.kt index adc61571a..bf73645cd 100644 --- a/app/src/main/java/org/fossasia/badgemagic/ui/fragments/AboutFragment.kt +++ b/app/src/main/java/org/fossasia/badgemagic/ui/fragments/AboutFragment.kt @@ -7,7 +7,7 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import org.fossasia.badgemagic.R -import org.fossasia.badgemagic.ui.fragments.base.BaseFragment +import org.fossasia.badgemagic.ui.base.BaseFragment import de.psdev.licensesdialog.LicensesDialog import de.psdev.licensesdialog.licenses.ApacheSoftwareLicense20 import de.psdev.licensesdialog.licenses.MITLicense diff --git a/app/src/main/java/org/fossasia/badgemagic/ui/fragments/SavedBadgesFragment.kt b/app/src/main/java/org/fossasia/badgemagic/ui/fragments/SavedBadgesFragment.kt index 1d8873b5c..68a3498ec 100644 --- a/app/src/main/java/org/fossasia/badgemagic/ui/fragments/SavedBadgesFragment.kt +++ b/app/src/main/java/org/fossasia/badgemagic/ui/fragments/SavedBadgesFragment.kt @@ -19,7 +19,7 @@ import org.fossasia.badgemagic.data.device.model.DataToSend import org.fossasia.badgemagic.data.device.model.Mode import org.fossasia.badgemagic.data.device.model.Speed import org.fossasia.badgemagic.viewmodels.FilesViewModel -import org.fossasia.badgemagic.ui.fragments.base.BaseFragment +import org.fossasia.badgemagic.ui.base.BaseFragment import org.fossasia.badgemagic.util.Converters import org.fossasia.badgemagic.util.SendingUtils import org.fossasia.badgemagic.adapter.OnSavedItemSelected diff --git a/app/src/main/java/org/fossasia/badgemagic/ui/fragments/SettingsFragment.kt b/app/src/main/java/org/fossasia/badgemagic/ui/fragments/SettingsFragment.kt index d54dc01c5..5fdf978fe 100644 --- a/app/src/main/java/org/fossasia/badgemagic/ui/fragments/SettingsFragment.kt +++ b/app/src/main/java/org/fossasia/badgemagic/ui/fragments/SettingsFragment.kt @@ -1,121 +1,46 @@ package org.fossasia.badgemagic.ui.fragments -import android.content.Intent -import android.net.Uri +import androidx.databinding.DataBindingUtil import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import androidx.lifecycle.Observer +import com.google.android.material.snackbar.Snackbar import org.fossasia.badgemagic.R -import org.fossasia.badgemagic.ui.fragments.base.BaseFragment -import de.psdev.licensesdialog.LicensesDialog -import de.psdev.licensesdialog.licenses.ApacheSoftwareLicense20 -import de.psdev.licensesdialog.licenses.MITLicense -import de.psdev.licensesdialog.model.Notice -import de.psdev.licensesdialog.model.Notices -import kotlinx.android.synthetic.main.fragment_about_us.* +import org.fossasia.badgemagic.databinding.FragmentSettingsBinding +import org.fossasia.badgemagic.ui.base.BaseFragment +import org.fossasia.badgemagic.viewmodels.SettingsViewModel +import org.koin.androidx.viewmodel.ext.android.viewModel class SettingsFragment : BaseFragment() { companion object { @JvmStatic fun newInstance() = - SettingsFragment() + SettingsFragment() } + private val viewModel by viewModel() + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { - return inflater.inflate(R.layout.fragment_about_us, container, false) + val binding = DataBindingUtil.inflate(inflater, R.layout.fragment_settings, container, false) + binding.viewModel = viewModel + return binding.root } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - about_fossasia.setOnClickListener { - contributorsLink() - } - - githubLayout.setOnClickListener { - github() - } - - ll_about_license.setOnClickListener { - license() - } - - ll_about_libs.setOnClickListener { - libraryLicenseDialog() - } - } - - private fun contributorsLink() { - val url = "https://github.com/fossasia/badge-magic-android/graphs/contributors" - val intent = Intent(Intent.ACTION_VIEW) - intent.data = Uri.parse(url) - startActivity(intent) - } - - private fun github() { - val url = "https://github.com/fossasia/badge-magic-android" - val intent = Intent(Intent.ACTION_VIEW) - intent.data = Uri.parse(url) - startActivity(intent) - } - - private fun license() { - val url = "https://github.com/fossasia/badge-magic-android/blob/development/LICENSE" - val intent = Intent(Intent.ACTION_VIEW) - intent.data = Uri.parse(url) - startActivity(intent) - } - - private fun libraryLicenseDialog() { - val notices = Notices() - - notices.addNotice( - Notice( - context?.getString(R.string.moshi), - context?.getString(R.string.moshi_github), - context?.getString(R.string.moshi_copy), - ApacheSoftwareLicense20() - ) - ) - notices.addNotice( - Notice( - context?.getString(R.string.gif), - context?.getString(R.string.gif_github), - context?.getString(R.string.gif_copy), - ApacheSoftwareLicense20() - ) - ) - notices.addNotice( - Notice( - context?.getString(R.string.timber), - context?.getString(R.string.timber_github), - context?.getString(R.string.timber_copy), - MITLicense() - ) - ) - notices.addNotice( - Notice( - context?.getString(R.string.scanner), - context?.getString(R.string.scanner_github), - context?.getString(R.string.scanner_copy), - ApacheSoftwareLicense20() - ) - ) - notices.addNotice( - Notice( - context?.getString(R.string.licences), - context?.getString(R.string.licences_github), - context?.getString(R.string.licences_copy), - ApacheSoftwareLicense20() - ) - ) + viewModel.changedLanguage.observe(viewLifecycleOwner, Observer { - LicensesDialog.Builder(context) - .setNotices(notices) - .setIncludeOwnLicense(true) - .build() + Snackbar + .make(view, requireContext().getString(R.string.change_language), Snackbar.LENGTH_INDEFINITE) + .setAction("RESTART") { + requireActivity().finishAffinity() + startActivity(requireActivity().intent) + } .show() + }) } } \ No newline at end of file diff --git a/app/src/main/java/org/fossasia/badgemagic/ui/fragments/TextArtFragment.kt b/app/src/main/java/org/fossasia/badgemagic/ui/fragments/TextArtFragment.kt index 0e0589f52..044b77b9e 100644 --- a/app/src/main/java/org/fossasia/badgemagic/ui/fragments/TextArtFragment.kt +++ b/app/src/main/java/org/fossasia/badgemagic/ui/fragments/TextArtFragment.kt @@ -22,7 +22,6 @@ import android.widget.EditText import android.widget.TextView import android.widget.LinearLayout import android.widget.Toast -import androidx.core.content.ContextCompat.getSystemService import androidx.lifecycle.Observer import androidx.recyclerview.widget.GridLayoutManager import com.google.android.material.tabs.TabLayout @@ -33,7 +32,7 @@ import org.fossasia.badgemagic.data.DrawableInfo import org.fossasia.badgemagic.data.ModeInfo import org.fossasia.badgemagic.data.device.model.Mode import org.fossasia.badgemagic.ui.custom.knob.Croller -import org.fossasia.badgemagic.ui.fragments.base.BaseFragment +import org.fossasia.badgemagic.ui.base.BaseFragment import kotlinx.android.synthetic.main.fragment_main_textart.* import kotlinx.android.synthetic.main.sections_tab.* import org.fossasia.badgemagic.adapter.DrawableAdapter diff --git a/app/src/main/java/org/fossasia/badgemagic/util/LocaleManager.kt b/app/src/main/java/org/fossasia/badgemagic/util/LocaleManager.kt new file mode 100644 index 000000000..aa1f88203 --- /dev/null +++ b/app/src/main/java/org/fossasia/badgemagic/util/LocaleManager.kt @@ -0,0 +1,30 @@ +package org.fossasia.badgemagic.util + +import android.content.Context +import android.content.res.Configuration +import org.fossasia.badgemagic.data.Language +import java.util.Locale + +object LocaleManager { + + fun setLocale(context: Context?): Context { + return updateResources(context as Context, + Language.values()[PreferenceUtils(context).selectedLanguage].locale + ) + } + + fun updateResources(context: Context, language: Locale): Context { + + val contextFun: Context + + Locale.setDefault(language) + + val resources = context.resources + val configuration = Configuration(resources.configuration) + + configuration.setLocale(language) + contextFun = context.createConfigurationContext(configuration) + + return contextFun + } +} \ No newline at end of file diff --git a/app/src/main/java/org/fossasia/badgemagic/util/PreferenceUtils.kt b/app/src/main/java/org/fossasia/badgemagic/util/PreferenceUtils.kt new file mode 100644 index 000000000..2c0047035 --- /dev/null +++ b/app/src/main/java/org/fossasia/badgemagic/util/PreferenceUtils.kt @@ -0,0 +1,18 @@ +package org.fossasia.badgemagic.util + +import android.content.Context +import android.content.Context.MODE_PRIVATE + +const val PREFS_FILENAME = "org.fossasia.badgemagic.prefs" +const val SELECTED_LANGUAGE = "selected_language" + +class PreferenceUtils(val context: Context) { + + private fun getPrefs() = context.getSharedPreferences(PREFS_FILENAME, MODE_PRIVATE) + + var selectedLanguage: Int + get() = getPrefs()?.getInt(SELECTED_LANGUAGE, 0) ?: 0 + set(value) { + getPrefs()?.edit()?.putInt(SELECTED_LANGUAGE, value)?.apply() + } +} \ No newline at end of file diff --git a/app/src/main/java/org/fossasia/badgemagic/util/Resource.kt b/app/src/main/java/org/fossasia/badgemagic/util/Resource.kt index c2b9d94e7..cc6775cc7 100644 --- a/app/src/main/java/org/fossasia/badgemagic/util/Resource.kt +++ b/app/src/main/java/org/fossasia/badgemagic/util/Resource.kt @@ -1,17 +1,13 @@ package org.fossasia.badgemagic.util +import android.content.Context import androidx.annotation.ColorRes import androidx.annotation.DrawableRes import androidx.annotation.StringRes -import org.fossasia.badgemagic.BadgeMagicApp -class Resource { - private val context by lazy { - BadgeMagicApp.appContext - } - - fun getResources() = context?.resources - fun getDrawable(@DrawableRes resId: Int) = context?.getDrawable(resId) - fun getString(@StringRes resId: Int) = context?.getString(resId) - fun getColor(@ColorRes resId: Int) = context?.resources?.getColor(resId) +class Resource(val context: Context) { + fun getResources() = context.resources + fun getDrawable(@DrawableRes resId: Int) = context.getDrawable(resId) + fun getString(@StringRes resId: Int) = context.getString(resId) + fun getColor(@ColorRes resId: Int) = context.resources?.getColor(resId) } \ No newline at end of file diff --git a/app/src/main/java/org/fossasia/badgemagic/viewmodels/SettingsViewModel.kt b/app/src/main/java/org/fossasia/badgemagic/viewmodels/SettingsViewModel.kt new file mode 100644 index 000000000..79e46ccee --- /dev/null +++ b/app/src/main/java/org/fossasia/badgemagic/viewmodels/SettingsViewModel.kt @@ -0,0 +1,27 @@ +package org.fossasia.badgemagic.viewmodels + +import androidx.databinding.ObservableField +import androidx.lifecycle.MutableLiveData +import androidx.lifecycle.ViewModel +import org.fossasia.badgemagic.data.Language +import org.fossasia.badgemagic.util.PreferenceUtils + +class SettingsViewModel( + private val preferenceUtils: PreferenceUtils +) : ViewModel() { + var languageList: ObservableField> = ObservableField() + var changedLanguage: MutableLiveData = MutableLiveData() + + init { + val mutableList = mutableListOf() + mutableList.addAll(Language.values().map { it.toString() }) + languageList.set(mutableList) + } + + fun getSelectedSpinnerLanguage() = preferenceUtils.selectedLanguage + + fun setSelectedSpinnerLangauge(position: Int) { + preferenceUtils.selectedLanguage = position + changedLanguage.value = true + } +} \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_menu_settings.xml b/app/src/main/res/drawable/ic_menu_settings.xml new file mode 100644 index 000000000..e2560dc1f --- /dev/null +++ b/app/src/main/res/drawable/ic_menu_settings.xml @@ -0,0 +1,7 @@ + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_settings.xml b/app/src/main/res/layout/fragment_settings.xml new file mode 100644 index 000000000..bea279997 --- /dev/null +++ b/app/src/main/res/layout/fragment_settings.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/menu/drawer_items.xml b/app/src/main/res/menu/drawer_items.xml index 015acbe21..d4b58d6ce 100644 --- a/app/src/main/res/menu/drawer_items.xml +++ b/app/src/main/res/menu/drawer_items.xml @@ -12,6 +12,10 @@ android:id="@+id/saved" android:icon="@drawable/ic_menu_save" android:title="@string/drawer_saved_badge" /> + diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml new file mode 100644 index 000000000..5759ef4d7 --- /dev/null +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -0,0 +1,85 @@ + + 徽章魔术 + + 您必须打开蓝牙才能使用发送功能 + 您必须授予所需的权限 + + + 华盖 + 速度 + 动画 + 剩下 + + 向上 + + 固定 + 雪花 + 图片 + 动画 + 激光 + 需要许可 + 找不到设备。请再试一次。 + 反转LED + 输入文字 + 位图图像 + 保存 + 文件名 + 继续之前输入文件名 + 保存徽章 + 保存的徽章 + 执行操作 + 删除 + 分享 + 已保存的徽章已删除。 + + 进口 + 选择有效徽章魔术配置 + 文件已存在 + 要覆盖更改吗? + 导入文件 + 你想导入吗? + 发送数据。 + 传递 + 效果 + + 打开导航抽屉 + 关闭导航抽屉 + 导航标题 + + 其他 + 反馈/错误报告 + 买徽章 + 关于我们 + 保存的徽章 + 创建徽章 + 导入成功 + Badge Magic是一款用于控制LED名称徽章的Android应用程序。目标是提供在LED徽章上描绘名称,图形和简单动画的选项。对于从智能手机到LED徽章的数据传输,我们使用蓝牙。该项目以Nilhcem的工作为基础。 + 联系我们 + GitHub上 + 分拆回购并推送更改或提交新问题。 + 执照 + 检查Badge Magic上使用的Apache License 2.0术语 + 图书馆许可证 + 检查Badge Magic上使用的第三方库。 + 莫希 + 版权所有2015 Square,Inc。 + Android的GIF抽拉 + 版权所有2013年 - 至今KarolWrótniak,Droids on Roids LLC + 木材 + 版权所有2013 Jake Wharton + Android BLE Scanner Compat库 + 版权所有2015,Nordic Semiconductor + 许可证对话框 + 版权所有2013 Philip Schiffer + 看起来还没有保存的徽章 + 没有保存的徽章! + 创建徽章 + 保存的徽章 + 您的设备不支持应用程序快捷方式。 + 请输入要发送的内容 + 蓝牙已打开。 + + 语言 + 设置 + 为了更改语言,我们需要重新启动应用程序。 + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 80a509a7f..d61fe6070 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,5 +1,14 @@ + Developed by FOSSASIA + contributors. + + https://github.com/square/moshi + https://github.com/JakeWharton/timber + https://github.com/NordicSemiconductor/Android-Scanner-Compat-Library + https://github.com/PSDev/LicensesDialog + https://github.com/koral––/android–gif–drawable + Badge Magic You must turn Bluetooth on to use send feature @@ -54,9 +63,6 @@ Saved Badges Create Badges Import Successful - Developed by FOSSASIA - contributors. - Badge Magic is an Android app to control LED name badges. The goal is to provide options to portray names, graphics and simple animations on LED badges. For the data transfer from the smartphone to the LED badge we use Bluetooth. The project is based on the work of Nilhcem. Connect With Us GitHub @@ -66,19 +72,14 @@ Library Licenses Check third-party libs used on Badge Magic. Moshi - https://github.com/square/moshi Copyright 2015 Square, Inc. android-gif-drawable - https://github.com/koral––/android–gif–drawable Copyright 2013 - present Karol Wrótniak, Droids on Roids LLC Timber - https://github.com/JakeWharton/timber Copyright 2013 Jake Wharton Android BLE Scanner Compat library - https://github.com/NordicSemiconductor/Android-Scanner-Compat-Library Copyright 2015, Nordic Semiconductor Licences Dialog - https://github.com/PSDev/LicensesDialog Copyright 2013 Philip Schiffer Looks like there are no saved badges yet No Saved Badges ! @@ -87,7 +88,12 @@ App shortcuts are not supported on your device. Please Enter Something to Send Bluetooth has been turned on. - Reset - Draw - Erase + + Language + Settings + In order to change the language we need to restart the app. + + Reset + Draw + Erase