Giter VIP home page Giter VIP logo

nanji's Introduction

License: MIT

Nanji Clock Widget

Home screen clock widget for language learners.

Features

  • Chinese, Japanese, Korean, Russian, English and default date and time format
  • 12/24 hours time format
  • Japanese era date format
  • Customizable time zone
  • Highly customizable appearance
  • Switch between showing digits/words on tap
  • Open system alarm app on tap

Download

Get it on F-Droid

Get it on Google Play

License

Copyright (c) 2012-2023 Artyom Mironov

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

nanji's People

Contributors

adiloguz avatar artyommironov avatar inson1 avatar vsnmrn avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

nanji's Issues

Add more informations to About page

Add name of the licence, link to source code (github) + link to translations from #26

I think its all important informations that should be in About page, so user can find it

Some translated languages cannot be used

Hi,
After updated the app to v1.4.3, my phone whose default language is French continues to show the app in English despite the French translation has been added. Then, I noticed some other languages (Czech and Turkish) in which the app is translated are not used in the app even if I set them as my phone default language.

I did some research and I noticed in build.gradle.kts only 3 of the 6 languages in which the app is available are mentioned in line 20 (resourceConfigurations), namely English, Japanese and Russian, and I can use these three languages normally. However I am just a translator and I have no experience in kotlin so I can't be sure that this is the cause of the problem, it's just a guess.

Numbers and words

My uncle likes this app as a customizable clock widget and wants to learn English. He is not going to practice counting for the sake of practicing and he says that he will never remember the numbers with that approach. He would like to see the date and time twice: numbers-only + words-only, so that he can visually match the numbers with the words. What about supporting two widgets?

An alternative solution could be to input a format string, so I can type
$DATE_WORDS $TIME_WORDS \n $TIME_NUMBERS
where the placeholders are like variables that are expanded.

Space in the battery prefix

I want any of these

  • 10:35 90%
  • 10:35 - 90%

But leading and trailing whitespace are auto-removed from the prefix that I entered.

Would you please add another clock ComponentName?

Would you add another clock app:

to your WidgetProvider.kt, please?

By the way, I saw another widget-app, which opens my alarm app onClick, while it isn't explicit specified.
If you're interested, I think it's the "RC_OPEN_CLOCK" part from here:
https://github.com/ashutoshgngwr/10-bitClockWidget/blob/master/10-bitClockWidget/app/src/main/java/com/github/ashutoshgngwr/tenbitclockwidget/ClockWidgetProvider.java

But I'm not sure, because I don't have adequate developing skills.
Probably, it helps at least to inspire you a bit :-)

Reproducible builds

Reproducible builds means that the build process always produces a byte-per-byte identical APK. This is a security measure against a potential compromise at F-droid / Google.

The downside is that occasional bugs in the toolchain have historically made builds non-reproducible, so this is a long-term commitment for the maintainer. That said, F-droid is pushing for repro builds for new apps, whenever possible, so I think the toolchain should be fairly stable nowadays.

Related: #17

Furigana support for Japanese

I just found this app a few days ago on F-Droid. It's pretty nice for telling the time and date in Japanese, but I think it'd be nicer with furigana support to show the readings of e.g. day of month, era, etc, to better help with memorization by usage.

German language

Thank you for this app. I am using it in English and I like that the appearance is both simple and customizable. I am learning German and would appreciate if it were also possible to add the German language.

Italian language

I am an Italian native speaker. If you want to add the Italian language, feel free to ask for any info. I have no knowledge of Kotlin however.

Crash of appearance-settings, if 'alarms & reminders'-permission is not allowed (@Android 14)

If I click on:
image
the app crashes with the following log:

type: crash
osVersion: google/{name}/{name}:14/UD1A.230803.041/2023102300:user/release-keys
package: com.kazufukurou.nanji:41
process: com.kazufukurou.nanji
processUptime: 1378 + 177 ms
installer: com.machiav3lli.fdroid

java.lang.RuntimeException: Unable to start receiver com.kazufukurou.nanji.ui.WidgetProvider: java.lang.SecurityException: Caller com.kazufukurou.nanji needs to hold android.permission.SCHEDULE_EXACT_ALARM or android.permission.USE_EXACT_ALARM to set exact alarms.
	at android.app.ActivityThread.handleReceiver(ActivityThread.java:4469)
	at android.app.ActivityThread.-$$Nest$mhandleReceiver(Unknown Source:0)
	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2263)
	at android.os.Handler.dispatchMessage(Handler.java:106)
	at android.os.Looper.loopOnce(Looper.java:205)
	at android.os.Looper.loop(Looper.java:294)
	at android.app.ActivityThread.main(ActivityThread.java:8199)
	at java.lang.reflect.Method.invoke(Native Method)
	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:552)
	at com.android.internal.os.ExecInit.main(ExecInit.java:49)
	at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method)
	at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:359)
Caused by: java.lang.SecurityException: Caller com.kazufukurou.nanji needs to hold android.permission.SCHEDULE_EXACT_ALARM or android.permission.USE_EXACT_ALARM to set exact alarms.
	at android.os.Parcel.createExceptionOrNull(Parcel.java:3066)
	at android.os.Parcel.createException(Parcel.java:3050)
	at android.os.Parcel.readException(Parcel.java:3026)
	at android.os.Parcel.readException(Parcel.java:2968)
	at android.app.IAlarmManager$Stub$Proxy.set(IAlarmManager.java:311)
	at android.app.AlarmManager.setImpl(AlarmManager.java:1093)
	at android.app.AlarmManager.setImpl(AlarmManager.java:1045)
	at android.app.AlarmManager.setExact(AlarmManager.java:809)
	at com.kazufukurou.nanji.ui.WidgetProvider.h(SourceFile:40)
	at com.kazufukurou.nanji.ui.WidgetProvider.i(SourceFile:247)
	at com.kazufukurou.nanji.ui.WidgetProvider.onUpdate(SourceFile:9)
	at android.appwidget.AppWidgetProvider.onReceive(AppWidgetProvider.java:71)
	at com.kazufukurou.nanji.ui.WidgetProvider.onReceive(SourceFile:6)
	at android.app.ActivityThread.handleReceiver(ActivityThread.java:4460)
	... 11 more
Caused by: android.os.RemoteException: Remote stack trace:
	at com.android.server.alarm.AlarmManagerService$5.set(AlarmManagerService.java:2981)
	at android.app.IAlarmManager$Stub.onTransact(IAlarmManager.java:181)
	at android.os.Binder.execTransactInternal(Binder.java:1368)
	at android.os.Binder.execTransact(Binder.java:1299)

If I manually give the needed permission:
image
and restart the app, it works pretty well.

Probably it's a good idea to ask for this permission on (first) app startup. What do you think?

Max size is too small

If free widget space is better used then we could have max size 55 dp or even more.
In "normal" size

Spanish Language - Code Contribution

Hi there, first of all, thanks for creating this app! n.n

I'm currently learning Spanish, so I would like to add Spanish as a supported language for the widget.

I have experience in Kotlin and a Spanish native speaker volunteered to help to make sure I don't make any mistakes on the language side of things

Would such a contribution/PR be welcome oO?

Icons in appearance dont explain well what they do

It took me longer than necessary to figure out what "rounding corners" slider does.
For first time I thought that "italic fond for numbers" switch underlines the text.

I think text would explain it better.

@artyommironov You talked about changing the appearance and I think this is big UX problem.

Widget not updating properly

When it behaves like this, the widget updates when I click on it, but otherwise appears to be stuck.

Screenshot_20230904-194233.png

See screenshot for example of another clock widget and the system clock being in sync but this one showing an outdated time. The Korean time reads 37 minutes in the screenshot.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.