diff --git a/README.md b/README.md
index 51239e9..700a41b 100755
--- a/README.md
+++ b/README.md
@@ -1,7 +1,6 @@
# WorkClock
An Android clock [下载](#直接下载)
-
## 功能
@@ -14,7 +13,7 @@ An Android clock [下载](#直接下载)
右滑:改变字本
上滑:增加亮度
下滑:减小亮度
- 双击:改变文字特效
+ 双击:界面(简单-详细-全屏)
定时器 单击->改变状态,长按-> 设置时间
@@ -30,9 +29,9 @@ An Android clock [下载](#直接下载)
下面说明条 单击->随机名言
- 时间 长按-->显示[更多功能状态](#更多功能)
+ 时间 长按-->进入[定制设置]
- 锁 单击->锁定屏幕,长按->进入[全屏精简模式](#全屏精简模式)
+ 锁 单击->锁定屏幕
### 定时提醒状态
@@ -40,10 +39,7 @@ An Android clock [下载](#直接下载)
(注:未手动 则闹铃结束后进入计时模式)
-### 自定界面样式示例
-
-
-### 更多功能
+### 详细状态
@@ -51,27 +47,21 @@ An Android clock [下载](#直接下载)
实心马 单击->设置背景色
- 空心马1 单击->改变当前的前景色 长按-->设置1号位的前景色 (注:此为启动时的前景应用色)
+ 空心马1 单击->改变当前的前景色 长按-->设置1号位的前景色
- 空心马2 单击->改变当前的前景色 长按-->设置2号位的前景色 (注:此也为背景动画的应用色)
+ 空心马2 单击->改变当前的前景色 长按-->设置2号位的前景色
- 图片 单击->背景图显隐 长按 -->重新选择背景图
+ 图片 单击->背景图显隐 长按 -->重新选择背景图
- 设置 单击->进入[更多设置页]()
+ 时钟 单击->数字/模似切换
- 时间 长按-->返回[普通状态](#普通状态)
-
-
+ 设置 单击->进入[系统设置]()
### 全屏精简模式
- 锁 单击->退出全屏模式,返回先前的状态
-
- 时间 长按-->即进入[模拟时钟模式](#模拟时钟模式)
-
- 定时显 长按->隐去自已
+ 定时显 长按->隐去自已
左滑:改变背景动画
右滑:改变字本
@@ -81,20 +71,13 @@ An Android clock [下载](#直接下载)
- 锁 单击->退出全屏模式,返回先前的状态
-
- 时钟 长按-->返回[全屏精简模式](#全屏精简模式)
+ 时钟 长按-->进入[定制设置]
左滑:改变背景动画
- 右滑:改变走钟样式
- 双击:改变指针样式
-------
+ 右滑:改变样式
-其它在设置页设置
-
-
-
+ 双击:界面(详细-全屏)
6.0系统以下,可以用 近身感应锁屏。 在屏锁状态下无效
@@ -104,11 +87,11 @@ An Android clock [下载](#直接下载)
### 直接下载:
-[城通网盘](https://u19673462.ctfile.com/fs/19673462-357507198)
+[城通网盘](https://u19673462.ctfile.com/fs/19673462-388092692)
-[百度网盘](https://pan.baidu.com/s/1KC7vzUa7jQkAAbNrmBqvTQ) 提取码: pacy
+[百度网盘](https://pan.baidu.com/s/1Uc8hdapVkAG1Zj8rFBsYfQ) 提取码: xfsj
-[Download APK](https://gitee.com/51danju/workclock/raw/master/workclock.apk)
+[Download APK](https://gitee.com/51danju/workclock/raw/master/workclock20190717.apk)
SourceCode:[WorkClock](https://gitee.com/51danju/workclock)
diff --git a/app/src/main/assets/test.3gp b/app/src/main/assets/test.3gp
new file mode 100644
index 0000000..aaf3116
Binary files /dev/null and b/app/src/main/assets/test.3gp differ
diff --git a/app/src/main/java/clock/socoolby/com/clock/Constants.java b/app/src/main/java/clock/socoolby/com/clock/Constants.java
index 8cb6903..4971fd7 100644
--- a/app/src/main/java/clock/socoolby/com/clock/Constants.java
+++ b/app/src/main/java/clock/socoolby/com/clock/Constants.java
@@ -8,10 +8,8 @@ public class Constants {
public final static int TALKING_HOURS=2;
public final static int TALKING_NO_REPORT=3;
public final static String SHARE_PERFERENCE_FILE="share_perference.conf";
- public final static String SHARE_PERFERENCE_FILE1="share_perference1.conf";
- public final static String SHARE_PERFERENCE_FILE2="share_perference2.conf";
public final static int SUCCESS_CODE=0;
public final static int FAIL_CODE=-1;
- public final static int TYPE_TRIGGER_AUTO_OFF=4;
- public final static int TYPE_TRIGGER_MANUAL =5;
+
+ public final static String APP_MEMO="小提示: ←动画 →字体 ↑↓亮度 双指_字体大小 双击_切屏 长按_参数设置";
}
\ No newline at end of file
diff --git a/app/src/main/java/clock/socoolby/com/clock/FamousQuotesManager.java b/app/src/main/java/clock/socoolby/com/clock/FamousQuotesManager.java
index abfdcb0..33573ee 100644
--- a/app/src/main/java/clock/socoolby/com/clock/FamousQuotesManager.java
+++ b/app/src/main/java/clock/socoolby/com/clock/FamousQuotesManager.java
@@ -165,8 +165,17 @@ public class FamousQuotesManager {
"民之难治,以其智多。故以智治国,国之贼。不以智治国,国之福。——《道德经》第六十五章"
};
+ public static final String[] APP_MEMOS=new String[]{
+ Constants.APP_MEMO,
+ "你可以长按「日期」来切换「界面主题」.",
+ "单击「星期几」可以快速切换「秒显」,长按则可以切换「时制」.",
+ "记着如怕乱触,可以使用「锁屏」.",
+ "前背景颜色可在「马头」切换,你也可以长按来改变它的设置,如果要彩虹字,则长按时间在参数设置里",
+ "注意哦,每个字体的大小在不同的模式下都不一样,可各自设置来保证美观,系统会记注每次改变."
+ };
+
public static String roundAutoQuotes(){
- int index=new java.util.Random().nextInt(4);
+ int index=new java.util.Random().nextInt(5);
switch (index){
case 1:
return roundTangShi();
@@ -174,8 +183,10 @@ public class FamousQuotesManager {
return roundLaoZi();
case 3:
return roundKonZi();
- default:
+ case 4:
return roundFamousQuotes();
+ default:
+ return roundAppMemo();
}
}
@@ -195,8 +206,13 @@ public class FamousQuotesManager {
return roundFamousQuotes(POETRY_OF_THE_TANG_DYNASTY);
}
+ public static String roundAppMemo(){
+ return roundFamousQuotes(APP_MEMOS);
+ }
+
public static String roundFamousQuotes(String[] arrays){
int index=new java.util.Random().nextInt(arrays.length);
return arrays[index];
}
+
}
diff --git a/app/src/main/java/clock/socoolby/com/clock/FontManager.java b/app/src/main/java/clock/socoolby/com/clock/FontManager.java
index 46fc259..9bde162 100644
--- a/app/src/main/java/clock/socoolby/com/clock/FontManager.java
+++ b/app/src/main/java/clock/socoolby/com/clock/FontManager.java
@@ -2,7 +2,6 @@ package clock.socoolby.com.clock;
import com.openbravo.data.basic.BasicException;
-import java.util.ArrayList;
import java.util.List;
import clock.socoolby.com.clock.dao.base.TimeFontStyle;
@@ -10,6 +9,8 @@ import e.odbo.data.dao.EntityManager;
public class FontManager {
+ public static final TimeFontStyle DEFAULT_FONT_STYLE =new TimeFontStyle("ds_digi",140,150,160,200);
+
private List fontStyleList;
private TimeFontStyle currentFontStyle;
@@ -20,10 +21,8 @@ public class FontManager {
public FontManager(EntityManager entityManager) {
this.entityManager=entityManager;
- //initTimeFontStyle();
loadForDB();
- currentFontIndex=0;
- currentFontStyle=fontStyleList.get(currentFontIndex);
+ setCurrentFontName("ds_digi");
}
private void loadForDB(){
@@ -36,10 +35,9 @@ public class FontManager {
fontStyleList.add(DEFAULT_FONT_STYLE);
}
- public static final TimeFontStyle DEFAULT_FONT_STYLE =new TimeFontStyle("ds_digi",140,150,160,200);
public int getCurrentFontSize(boolean isFullScreen,boolean isDisplaySecond){
- int fontSize=currentFontStyle.displaySecond;
+ int fontSize;
if(isFullScreen){
if(isDisplaySecond) {
fontSize=currentFontStyle.displaySecondOnFull;
@@ -57,7 +55,7 @@ public class FontManager {
}
public int getMaxFontSize(boolean isDisplaySecond){
- int fontSize=currentFontStyle.displaySecond;
+ int fontSize;
if(isDisplaySecond) {
fontSize=currentFontStyle.displaySecondOnFull;
}else{
@@ -91,6 +89,14 @@ public class FontManager {
}
}
+ private TimeFontStyle getFontStyleByName(String name){
+ for(TimeFontStyle entry:fontStyleList)
+ if (entry.name.equalsIgnoreCase(name)) {
+ return entry;
+ }
+ return null;
+ }
+
public void updateCurrentFontSize(boolean isFullScreen,boolean isDisplaySecond,int newFontSize){
if(isFullScreen){
if(isDisplaySecond) {
@@ -112,6 +118,30 @@ public class FontManager {
}
}
+ public void updateFontSize(String fontName,boolean isFullScreen,boolean isDisplaySecond,int newFontSize){
+ TimeFontStyle timeFontStyle=getFontStyleByName(fontName);
+ if(timeFontStyle==null)
+ return;
+ if(isFullScreen){
+ if(isDisplaySecond) {
+ timeFontStyle.displaySecondOnFull=newFontSize;
+ }else{
+ timeFontStyle.noDisplaySecondOnFull=newFontSize;
+ }
+ }else{
+ if(isDisplaySecond) {
+ timeFontStyle.displaySecond=newFontSize;
+ }else{
+ timeFontStyle.noDisplaySecond=newFontSize;
+ }
+ }
+ try {
+ entityManager.update(timeFontStyle);
+ } catch (BasicException e) {
+ e.printStackTrace();
+ }
+ }
+
public void addCoustomFontStyle(List coustomFontStyleList){
this.fontStyleList.addAll(coustomFontStyleList);
}
diff --git a/app/src/main/java/clock/socoolby/com/clock/MainActivity.java b/app/src/main/java/clock/socoolby/com/clock/MainActivity.java
index f4f6469..f5bef4f 100755
--- a/app/src/main/java/clock/socoolby/com/clock/MainActivity.java
+++ b/app/src/main/java/clock/socoolby/com/clock/MainActivity.java
@@ -9,6 +9,7 @@ import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProviders;
import android.content.Intent;
+import android.graphics.Point;
import android.net.Uri;
import android.os.Build;
import android.os.PowerManager;
@@ -17,6 +18,7 @@ import android.provider.Settings;
import androidx.core.app.ActivityCompat;
import androidx.appcompat.app.AppCompatActivity;
import android.util.Log;
+import android.view.Display;
import android.view.GestureDetector;
import android.view.KeyEvent;
import android.view.MotionEvent;
@@ -41,7 +43,8 @@ import java.util.List;
import clock.socoolby.com.clock.alter.AlterManager;
import clock.socoolby.com.clock.dao.base.TimeFontStyle;
-import clock.socoolby.com.clock.fragment.SystemAppConfigFragment;
+import clock.socoolby.com.clock.fragment.houranimator.HourVideoFragment;
+import clock.socoolby.com.clock.fragment.system.SystemAppConfigFragment;
import clock.socoolby.com.clock.fragment.handup.AbstractHandUpFragment;
import clock.socoolby.com.clock.fragment.handup.AlterFragmentFactory;
import clock.socoolby.com.clock.fragment.digit.DigitClockConfigFragment;
@@ -49,8 +52,8 @@ import clock.socoolby.com.clock.fragment.digit.DigitClockFragment;
import clock.socoolby.com.clock.fragment.houranimator.HourAnimatorFactory;
import clock.socoolby.com.clock.fragment.simulate.SimulateClockConfigFragment;
import clock.socoolby.com.clock.fragment.simulate.SimulateClockFragment;
-import clock.socoolby.com.clock.fragment.ThemeUIDefaultFragment;
-import clock.socoolby.com.clock.fragment.ThemeUISampleFragment;
+import clock.socoolby.com.clock.fragment.theme.ThemeUIDefaultFragment;
+import clock.socoolby.com.clock.fragment.theme.ThemeUISampleFragment;
import clock.socoolby.com.clock.net.protocol.weather.WeatherResponse;
import clock.socoolby.com.clock.service.ProximityService;
import clock.socoolby.com.clock.state.ClockModeEnum;
@@ -66,7 +69,6 @@ import clock.socoolby.com.clock.viewmodel.ThemeUIViewModel;
import clock.socoolby.com.clock.viewmodel.ViewModelFactory;
import clock.socoolby.com.clock.widget.animatorview.AnimatorView;
import clock.socoolby.com.clock.widget.animatorview.I_Animator;
-import clock.socoolby.com.clock.widget.animatorview.animator.FishAnimator;
import clock.socoolby.com.clock.widget.animatorview.animator.clockanimator.ClockFactory;
import static clock.socoolby.com.clock.state.ClockThemeUITypeEnum.FULLSCREEN;
@@ -76,22 +78,18 @@ import static clock.socoolby.com.clock.state.ClockThemeUITypeEnum.SETTING;
public class MainActivity extends AppCompatActivity implements android.view.GestureDetector.OnGestureListener, ScaleGestureDetector.OnScaleGestureListener, GestureDetector.OnDoubleTapListener {
private final static String TAG = MainActivity.class.getSimpleName();
- private final static int SETTING_REQUEST_CODE = 100;
-
//背景动画
private AnimatorView animatorView;
private I_Animator backGroundAnimator;
-
- private final static int ANIMATOR_TEXTLED=80;
+ private final static int ANIMATOR_TEXTLED = 80;
private FrameLayout themeUIContainer;
//背景图相关
private ImageView tv_background_image;
-
// 定义手势检测器实例
GestureDetector detector;
ScaleGestureDetector scaleGestureDetector;
@@ -106,7 +104,7 @@ public class MainActivity extends AppCompatActivity implements android.view.Ges
private ClockStateMachine clockStateMachine;
- Intent proximityServiceIntent=null;
+ Intent proximityServiceIntent = null;
FontManager fontManager;
GlobalViewModel globalViewModel;
@@ -124,10 +122,10 @@ public class MainActivity extends AppCompatActivity implements android.view.Ges
public void setWeather(WeatherResponse weather) {
if (weather == null)
return;
- Log.d(TAG,"setWeather...");
- this.weatherAdape= weather;
+ Log.d(TAG, "setWeather...");
+ this.weatherAdape = weather;
if (weather.getTodayWeather() != null)
- themeUIViewModel.getWeatherDescription().setValue(weather.getTodayWeather().weather+"/"+weather.getTodayWeather().temperature);
+ themeUIViewModel.getWeatherDescription().setValue(weather.getTodayWeather().weather + "/" + weather.getTodayWeather().temperature);
}
@@ -136,110 +134,117 @@ public class MainActivity extends AppCompatActivity implements android.view.Ges
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- //Log.d(TAG,"onCreate...");
-
setContentView(R.layout.activity_main);
themeUIContainer = findViewById(R.id.main_background);
- tv_background_image=findViewById(R.id.tv_background_image);
+ tv_background_image = findViewById(R.id.tv_background_image);
- animatorView=findViewById(R.id.tv_background_animatorview);
+ animatorView = findViewById(R.id.tv_background_animatorview);
- if(PermissionUtils.isGranted("android.permission.WAKE_LOCK","android.permission.DEVICE_POWER")) {
+ if (PermissionUtils.isGranted("android.permission.WAKE_LOCK", "android.permission.DEVICE_POWER")) {
PowerManager powerManager = (PowerManager) this.getSystemService(POWER_SERVICE);
- wakeLock = powerManager.newWakeLock(PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.FULL_WAKE_LOCK |powerManager.ON_AFTER_RELEASE, "Clock");
+ wakeLock = powerManager.newWakeLock(PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.FULL_WAKE_LOCK | powerManager.ON_AFTER_RELEASE, "Clock");
localWakeLock = powerManager.newWakeLock(32, "MyPower");
- }else
+ } else
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
//创建手势检测器
detector = new GestureDetector(this, this);
detector.setOnDoubleTapListener(this);
- scaleGestureDetector=new ScaleGestureDetector(this,this);
+ scaleGestureDetector = new ScaleGestureDetector(this, this);
ClockApplication.getInstance().setMainActivity(this);
init();
+ testSetup();
+
//ClockApplication.valueOf().getBusinessService().checkUpdate();
}
- private boolean isPowerManagerDisable(){
- return wakeLock==null;
+ private boolean isPowerManagerDisable() {
+ return wakeLock == null;
}
- private void setUpProximityService(){
- if(isPowerManagerDisable())
+ private void setUpProximityService() {
+ if (isPowerManagerDisable())
return;
- try{
- if(isScreenLock()){
- stopService(proximityServiceIntent);
- }else {
+ try {
+ if (isScreenLock()) {
+ stopService(proximityServiceIntent);
+ } else {
if (model.isTriggerScreen()) {
startService(proximityServiceIntent);
} else {
stopService(proximityServiceIntent);
}
- }
- }catch (Exception e){
+ }
+ } catch (Exception e) {
e.printStackTrace();
}
}
- private void onRequestPermissions(int reqCode,String ...permissions){
+ private void onRequestPermissions(int reqCode, String... permissions) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (!PermissionUtils.isGranted(permissions)) {
ActivityCompat.requestPermissions(this,
permissions,
reqCode);
- }else {
- Toast.makeText(this,"权限已申请",Toast.LENGTH_LONG).show();
+ } else {
+ Toast.makeText(this, "权限已申请", Toast.LENGTH_LONG).show();
}
}
}
private void init() {
- model = ((ClockApplication)getApplication()).getModel();
+ model = ((ClockApplication) getApplication()).getModel();
Log.d(TAG, "init model:" + model.toString());
proximityServiceIntent = new Intent(this, ProximityService.class);
- fontManager=new FontManager(ClockApplication.getInstance().getEntityManager());
+ fontManager = new FontManager(ClockApplication.getInstance().getEntityManager());
- animatorManager=new AnimatorManager();
+ animatorManager = new AnimatorManager();
- ViewModelFactory viewModelFactory=new ViewModelFactory(model);
- globalViewModel= ViewModelProviders.of(MainActivity.this, viewModelFactory).get(GlobalViewModel.class);
- digitViewModel= ViewModelProviders.of(MainActivity.this, viewModelFactory).get(DigitViewModel.class);
- simulateViewModel=ViewModelProviders.of(MainActivity.this, viewModelFactory).get(SimulateViewModel.class);
- themeUIViewModel=ViewModelProviders.of(MainActivity.this, viewModelFactory).get(ThemeUIViewModel.class);
- alterViewModel=ViewModelProviders.of(MainActivity.this, viewModelFactory).get(AlterViewModel.class);
+ ViewModelFactory viewModelFactory = new ViewModelFactory(model);
+ globalViewModel = ViewModelProviders.of(MainActivity.this, viewModelFactory).get(GlobalViewModel.class);
+ digitViewModel = ViewModelProviders.of(MainActivity.this, viewModelFactory).get(DigitViewModel.class);
+ simulateViewModel = ViewModelProviders.of(MainActivity.this, viewModelFactory).get(SimulateViewModel.class);
+ themeUIViewModel = ViewModelProviders.of(MainActivity.this, viewModelFactory).get(ThemeUIViewModel.class);
+ alterViewModel = ViewModelProviders.of(MainActivity.this, viewModelFactory).get(AlterViewModel.class);
- alterManager=new AlterManager(model.getStartHourPowerTime(),model.getStopHourPowerTime(),globalViewModel,ClockApplication.getInstance().getEntityManager());
+ alterManager = new AlterManager(model.getStartHourPowerTime(), model.getStopHourPowerTime(), globalViewModel, ClockApplication.getInstance().getEntityManager());
- clockStateMachine=new ClockStateMachine(alterManager,globalViewModel,digitViewModel,simulateViewModel,themeUIViewModel,alterViewModel);
+ clockStateMachine = new ClockStateMachine(alterManager, globalViewModel, digitViewModel, simulateViewModel, themeUIViewModel, alterViewModel);
setUpProximityService();
bindViewModel();
- themeUIManager=new ThemeUIManager(ClockApplication.getInstance().getEntityManager(),model);
+ themeUIManager = new ThemeUIManager(ClockApplication.getInstance().getEntityManager(), model,fontManager);
- testSetup();
}
- int daily=30;
+ //这里对第一次启动
+ private void firstStartSetup(){
+ model.setFirstStart(false);
+ }
+
+
+ int daily = 30;
+
private void testSetup() {
- globalViewModel.getHourAlterTypeName().setValue(FishAnimator.NAME);
+ //model.setFirstStart(true);
//model.setBootStart(true);
//globalViewModel.getHandUpTypeName().setValue(HandUpSelect123Fragment.NAME);
- /*Observer timeChange= new Observer() {
+ /*globalViewModel.getHourAlterTypeName().setValue(HourVideoFragment.NAME);
+ Observer timeChange= new Observer() {
@Override
public void onChanged(Boolean aBoolean) {
daily--;
@@ -266,17 +271,18 @@ public class MainActivity extends AppCompatActivity implements android.view.Ges
e.printStackTrace();
}*/
- fontManager.addCoustomFontStyle(new TimeFontStyle("BONX-TubeBold",110,120,130,150));
- fontManager.addCoustomFontStyle(new TimeFontStyle("BONX-TubeBoldReverse",110,120,130,150));
+ //fontManager.addCoustomFontStyle(new TimeFontStyle("BONX-TubeBold", 110, 120, 130, 150));
+ //fontManager.addCoustomFontStyle(new TimeFontStyle("BONX-TubeBoldReverse", 110, 120, 130, 150));
}
- private void bindViewModel(){
+ private void bindViewModel() {
globalViewModel.getClockInterfaceTypeEnum().observe(this, new Observer() {
@Override
public void onChanged(ClockInterfaceTypeEnum clockInterfaceTypeEnum) {
- switch (clockInterfaceTypeEnum){
+ Log.d(TAG,"comming in clockInterfaceTypeEnum change observe type:"+clockInterfaceTypeEnum.name());
+ switch (clockInterfaceTypeEnum) {
case Digit:
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new DigitClockFragment()).commit();
break;
@@ -290,21 +296,22 @@ public class MainActivity extends AppCompatActivity implements android.view.Ges
globalViewModel.getClockModeEnum().observe(this, new Observer() {
@Override
public void onChanged(ClockModeEnum clockModeEnum) {
- switch(clockModeEnum){
+ switch (clockModeEnum) {
case HANDUP:
- AbstractHandUpFragment alterFragment= AlterFragmentFactory.build(globalViewModel.getHandUpTypeName().getValue(),clockStateMachine);
- getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, alterFragment).commit();
+ closeAllConfigFragment();
+ AbstractHandUpFragment alterFragment = AlterFragmentFactory.build(globalViewModel.getHandUpTypeName().getValue(), clockStateMachine);
+ getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, alterFragment).addToBackStack(null).commit();
break;
default:
- globalViewModel.getClockInterfaceTypeEnum().setValue(globalViewModel.getClockInterfaceTypeEnum().getValue());
- };
+ getSupportFragmentManager().popBackStack();
+ }
}
});
themeUIViewModel.getThemeName().observe(this, new Observer() {
@Override
public void onChanged(String s) {
- switch (s){
+ switch (s) {
case ThemeUISampleFragment.THEME_NAME:
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_config_container, new ThemeUISampleFragment()).commit();
break;
@@ -317,14 +324,14 @@ public class MainActivity extends AppCompatActivity implements android.view.Ges
globalViewModel.getBackgroundImageVisable().observe(this, new Observer() {
@Override
public void onChanged(Boolean visible) {
- tv_background_image.setVisibility(visible?View.VISIBLE:View.GONE);
+ tv_background_image.setVisibility(visible ? View.VISIBLE : View.GONE);
}
});
globalViewModel.getBackgroundImageUri().observe(this, new Observer() {
@Override
public void onChanged(Uri uri) {
- if(uri==null) {
+ if (uri == null) {
tv_background_image.setVisibility(View.GONE);
return;
}
@@ -355,7 +362,7 @@ public class MainActivity extends AppCompatActivity implements android.view.Ges
globalViewModel.getBackgroundAnimatorName().observe(this, new Observer() {
@Override
public void onChanged(String s) {
- changeBackGroundAnimator(s,globalViewModel.getBackgroundAnimatorRandomColor());
+ changeBackGroundAnimator(s, globalViewModel.getBackgroundAnimatorRandomColor());
}
});
@@ -384,21 +391,21 @@ public class MainActivity extends AppCompatActivity implements android.view.Ges
digitViewModel.getTimeFontStyle().observe(this, new Observer() {
@Override
public void onChanged(TimeFontStyle timeFontStyle) {
- digitViewModel.setTimeFontStyleSize(fontManager.getCurrentFontSize(themeUIViewModel.getClockUITypeEnum().getValue()==FULLSCREEN,model.isDisplaySecond()));
+ digitViewModel.setTimeFontStyleSize(fontManager.getCurrentFontSize(themeUIViewModel.getClockUITypeEnum().getValue() == FULLSCREEN, model.isDisplaySecond()));
}
});
themeUIViewModel.getClockUITypeEnum().observe(this, new Observer() {
@Override
public void onChanged(ClockThemeUITypeEnum clockThemeUITypeEnum) {
- int fontSize=0;
- boolean displaySecond=model.isDisplaySecond();
- switch (clockThemeUITypeEnum){
+ int fontSize = 0;
+ boolean displaySecond = model.isDisplaySecond();
+ switch (clockThemeUITypeEnum) {
case FULLSCREEN:
- fontSize=fontManager.getCurrentFontSize(true,displaySecond);
+ fontSize = fontManager.getCurrentFontSize(true, displaySecond);
break;
default:
- fontSize=fontManager.getCurrentFontSize(false,displaySecond);
+ fontSize = fontManager.getCurrentFontSize(false, displaySecond);
}
digitViewModel.setTimeFontStyleSize(fontSize);
}
@@ -407,35 +414,42 @@ public class MainActivity extends AppCompatActivity implements android.view.Ges
digitViewModel.getDisplaySecond().observe(this, new Observer() {
@Override
public void onChanged(Boolean aBoolean) {
- digitViewModel.setTimeFontStyleSize(fontManager.getCurrentFontSize(themeUIViewModel.getClockUITypeEnum().getValue()==FULLSCREEN,aBoolean));
+ digitViewModel.setTimeFontStyleSize(fontManager.getCurrentFontSize(themeUIViewModel.getClockUITypeEnum().getValue() == FULLSCREEN, aBoolean));
}
});
globalViewModel.getTimeHourAnimatorStarting().observe(this, new Observer() {
@Override
public void onChanged(Boolean starting) {
- Log.d(TAG, "on hour animator changed: "+starting);
- if(!HourAnimatorFactory.isHourAnimator(globalViewModel.getHourAlterTypeName().getValue()))
+ Log.d(TAG, "on hour animator changed: " + starting);
+ if (!HourAnimatorFactory.isHourAnimator(globalViewModel.getHourAlterTypeName().getValue()))
return;
- if(starting)
- getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, HourAnimatorFactory.builder(globalViewModel.getHourAlterTypeName().getValue(),globalViewModel.getTime_hour().getValue())).commit();
+ if (starting)
+ getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, HourAnimatorFactory.builder(globalViewModel.getHourAlterTypeName().getValue(), globalViewModel.getTime_hour().getValue())).addToBackStack(null).commit();
else
- globalViewModel.getClockInterfaceTypeEnum().setValue(globalViewModel.getClockInterfaceTypeEnum().getValue());
+ getSupportFragmentManager().popBackStack();
+ //globalViewModel.getClockInterfaceTypeEnum().setValue(globalViewModel.getClockInterfaceTypeEnum().getValue());
}
});
}
+ private void closeAllConfigFragment(){
+ getSupportFragmentManager().popBackStack();
+ }
+
//将该Activity上的触碰事件交给GestureDetector处理
@Override
- public boolean onTouchEvent(MotionEvent me)
- {
- if(globalViewModel.getAppConfig())
- return false;
- if(me.getPointerCount()>1)
- return scaleGestureDetector.onTouchEvent(me);
- return detector.onTouchEvent(me);
+ public boolean onTouchEvent(MotionEvent me) {
+ if (globalViewModel.getAppConfig())
+ return true;
+
+ boolean res = scaleGestureDetector.onTouchEvent(me);
+ if (!scaleGestureDetector.isInProgress()) {
+ res = detector.onTouchEvent(me);
+ }
+ return res;
}
@@ -443,17 +457,16 @@ public class MainActivity extends AppCompatActivity implements android.view.Ges
public void onDestroy() {
//Log.i(TAG, "onDestroy....");
super.onDestroy();
- if(clockStateMachine!=null)
- clockStateMachine.onDestory();
+ if (clockStateMachine != null)
+ clockStateMachine.onDestory();
try {
if (model.isTriggerScreen())
stopService(proximityServiceIntent);
- }catch (Exception e){
+ } catch (Exception e) {
e.printStackTrace();
}
- if(backGroundAnimator!=null)
+ if (backGroundAnimator != null)
backGroundAnimator.stop();
-
}
@@ -463,27 +476,35 @@ public class MainActivity extends AppCompatActivity implements android.view.Ges
//Log.i(TAG, "onDestroy....");
super.onResume();
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
- if(!isPowerManagerDisable())
+ if (!isPowerManagerDisable())
wakeLock.acquire();
- if(backGroundAnimator!=null)
+ if (backGroundAnimator != null)
backGroundAnimator.start();
clockStateMachine.start();
}
+ @Override
+ protected void onStart() {
+ super.onStart();
+ if(model.isFirstStart())
+ firstStartSetup();
+ }
+
@Override
protected void onPause() {
super.onPause();
//Log.d(TAG,"onPause..");
- if(!isPowerManagerDisable())
+ if (!isPowerManagerDisable())
wakeLock.release();
- if(backGroundAnimator!=null)
+ if (backGroundAnimator != null)
backGroundAnimator.stop();
clockStateMachine.stop();
}
-
- public void configBackGroundImage(){
+
+ public void configBackGroundImage() {
PictureSelector.create(MainActivity.this)
.openGallery(PictureMimeType.ofImage())
+ .isCamera(false)
.imageSpanCount(4)
.forResult(PictureConfig.CHOOSE_REQUEST);
}
@@ -492,68 +513,70 @@ public class MainActivity extends AppCompatActivity implements android.view.Ges
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
+ List selectList;
switch (requestCode) {
case PictureConfig.CHOOSE_REQUEST:
// 图片、视频、音频选择结果回调
- List selectList = PictureSelector.obtainMultipleResult(data);
+ selectList = PictureSelector.obtainMultipleResult(data);
// 例如 LocalMedia 里面返回三种path
// 1.media.getPath(); 为原图path
// 2.media.getCutPath();为裁剪后path,需判断media.isCut();是否为true 注意:音视频除外
// 3.media.getCompressPath();为压缩后path,需判断media.isCompressed();是否为true 注意:音视频除外
// 如果裁剪并压缩了,以取压缩路径为准,因为是先裁剪后压缩的
- globalViewModel.getBackgroundImageUri().setValue(Uri.parse(selectList.get(0).getPath()));
+ globalViewModel.setBackgroundImageUri(Uri.parse(selectList.get(0).getPath()));
globalViewModel.getBackgroundImageVisable().setValue(true);
break;
- case SETTING_REQUEST_CODE:
- init();
+ case PictureConfig.TYPE_VIDEO:
+ selectList = PictureSelector.obtainMultipleResult(data);
+ model.setTimeHourVideoPath(selectList.get(0).getPath());
break;
}
}
}
- protected void setBackGroundColor(Integer color){
- if(null==color)
+ protected void setBackGroundColor(Integer color) {
+ if (null == color)
return;
themeUIContainer.setBackgroundColor(color);
}
- public void nextBackGroundAnimator(){
- boolean randomColor=globalViewModel.getBackgroundAnimatorRandomColor();
- if(!randomColor&&backGroundAnimator!=null) {
+ public void nextBackGroundAnimator() {
+ boolean randomColor = globalViewModel.getBackgroundAnimatorRandomColor();
+ if (!randomColor && backGroundAnimator != null) {
globalViewModel.setBackgroundAnimatorRandomColor(true);
backGroundAnimator.setRandColor(true);
animatorView.setAnimator(backGroundAnimator);
- }else {
+ } else {
globalViewModel.setBackgroundAnimatorRandomColor(false);
globalViewModel.setBackgroundAnimatorName(animatorManager.next());
}
}
- public void changeBackGroundAnimator(String animatorName,boolean randomColor){
- backGroundAnimator= animatorManager.configByName(animatorName);
- if(backGroundAnimator!=null) {
- backGroundAnimator.init(animatorView.getContext(),animatorView);
+ public void changeBackGroundAnimator(String animatorName, boolean randomColor) {
+ backGroundAnimator = animatorManager.configByName(animatorName);
+ if (backGroundAnimator != null) {
+ backGroundAnimator.init(animatorView.getContext(), animatorView);
backGroundAnimator.setRandColor(randomColor);
}
animatorView.setAnimator(backGroundAnimator);
}
- public void changeBackGroudAnimatorColor(int color){
+ public void changeBackGroudAnimatorColor(int color) {
animatorView.setColor(color);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
- if(isScreenLock())
+ if (isScreenLock())
return super.onKeyDown(keyCode, event);
if (keyCode == KeyEvent.KEYCODE_BACK) {
- if(globalViewModel.getAppConfig()) {
+ if (globalViewModel.getAppConfig()) {
getSupportFragmentManager().popBackStack();
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
return true;
}
- if(!isFullScreen()){
+ if (!isFullScreen()) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setIcon(android.R.drawable.ic_dialog_info);
builder.setTitle("温馨提示");
@@ -561,10 +584,10 @@ public class MainActivity extends AppCompatActivity implements android.view.Ges
builder.setCancelable(true);
builder.setPositiveButton("确定", (dialog, which) -> {
- MainActivity.this.finish();
+ MainActivity.this.finish();
});
builder.setNegativeButton("取消", (dialog, which) -> {
- dialog.dismiss();
+ dialog.dismiss();
});
builder.create().show();
}
@@ -576,9 +599,7 @@ public class MainActivity extends AppCompatActivity implements android.view.Ges
return super.onKeyDown(keyCode, event);
}
- public void setup(){
- //Intent intent = new Intent(this, SettingActivity.class);
- //startActivityForResult(intent, SETTING_REQUEST_CODE);
+ public void setup() {
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_config_container, new SystemAppConfigFragment(model)).addToBackStack(null).commit();
}
@@ -592,12 +613,12 @@ public class MainActivity extends AppCompatActivity implements android.view.Ges
}
- private boolean isScreenLock(){
+ private boolean isScreenLock() {
return globalViewModel.getSrceenLock().getValue();
}
- private boolean isFullScreen(){
- return themeUIViewModel.getClockUITypeEnum().getValue()== FULLSCREEN;
+ private boolean isFullScreen() {
+ return themeUIViewModel.getClockUITypeEnum().getValue() == FULLSCREEN;
}
@Override
@@ -624,95 +645,10 @@ public class MainActivity extends AppCompatActivity implements android.view.Ges
showConfigThemeUI();
}
- private void changeThemeUI(){
- if(!isPowerManagerDisable())
- localWakeLock.isHeld();
- switch (globalViewModel.getClockInterfaceTypeEnum().getValue()){
- case Digit:
- if(getCurrentThemeMode()== FULLSCREEN)
- switchMode(ClockThemeUITypeEnum.NORMAL);
- else if(getCurrentThemeMode()== SETTING)
- switchMode(ClockThemeUITypeEnum.FULLSCREEN);
- else
- switchMode(SETTING);
- break;
- case Simulate:
- if(getCurrentThemeMode()== SETTING)
- switchMode(FULLSCREEN);
- else
- switchMode(SETTING);
- break;
- }
- }
-
-
- private void switchMode(ClockThemeUITypeEnum uiTypeEnum){
- themeUIViewModel.setClockUITypeEnum(uiTypeEnum);
- }
-
- private ClockThemeUITypeEnum getCurrentThemeMode(){
- return themeUIViewModel.getClockUITypeEnum().getValue();
- }
-
- @Override
- public boolean onFling(MotionEvent e1, MotionEvent e2, float v, float v1) {
- if(isScreenLock()&&!isFullScreen())
- return true;
- Log.d(TAG,"onFling");
- int brightness=globalViewModel.getBrightness().getValue();
- if (e2.getY() - e1.getY() < -200) { // 从上至下
- Log.d(TAG, "change brightness +10");
- brightness = brightness + 10;
- if (brightness >= 255){
- Toast.makeText(this,"最大亮度了",Toast.LENGTH_SHORT).show();
- return true;
- }
- globalViewModel.getBrightness().setValue(brightness);
- return true;
- }else if (e2.getY() - e1.getY() >200) { // 从下至上
- Log.d(TAG,"change brightness -10");
- brightness=brightness-10;
- if(brightness<=0) {
- Toast.makeText(this,"最小亮度了",Toast.LENGTH_SHORT).show();
- return true;
- }
- globalViewModel.getBrightness().setValue(brightness);
- return true;
- }else if (e2.getX() - e1.getX() > 200) { // 从左向右滑动(左进右出)
- Log.d(TAG,"left->right");
- if(globalViewModel.getClockInterfaceTypeEnum().getValue()== ClockInterfaceTypeEnum.Simulate){
- simulateViewModel.setClockTypeName(ClockFactory.nextSimulateClockName(simulateViewModel.getClockTypeName().getValue()));
- return true;
- }
- digitViewModel.setTimeFontStyle(fontManager.nextFont());
- return true;
- } else if (e2.getX() - e1.getX() < -200) { // 从右向左滑动(右进左出)
- nextBackGroundAnimator();
- return true;
- }
- return false;
- }
-
-
-
- @Override
- public boolean onSingleTapConfirmed(MotionEvent e) {
- return false;
- }
-
- //boolean isShowAdvConfig=false;
-
- @Override
- public boolean onDoubleTap(MotionEvent e) {
- changeThemeUI();
- return true;
- }
-
-
- private void showConfigThemeUI(){
- if(globalViewModel.getClockModeEnum().getValue()!=ClockModeEnum.NORMAL)
- return ;
- switch (globalViewModel.getClockInterfaceTypeEnum().getValue()){
+ private void showConfigThemeUI() {
+ if (globalViewModel.getClockModeEnum().getValue() != ClockModeEnum.NORMAL)
+ return;
+ switch (globalViewModel.getClockInterfaceTypeEnum().getValue()) {
case Digit:
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_config_container, new DigitClockConfigFragment(themeUIManager)).addToBackStack(null).commit();
break;
@@ -722,40 +658,134 @@ public class MainActivity extends AppCompatActivity implements android.view.Ges
}
}
+ private void changeThemeUI() {
+ if (!isPowerManagerDisable())
+ localWakeLock.isHeld();
+ switch (globalViewModel.getClockInterfaceTypeEnum().getValue()) {
+ case Digit:
+ if (getCurrentThemeMode() == FULLSCREEN)
+ switchMode(ClockThemeUITypeEnum.NORMAL);
+ else if (getCurrentThemeMode() == SETTING)
+ switchMode(ClockThemeUITypeEnum.FULLSCREEN);
+ else
+ switchMode(SETTING);
+ break;
+ case Simulate:
+ if (getCurrentThemeMode() == SETTING)
+ switchMode(FULLSCREEN);
+ else
+ switchMode(SETTING);
+ break;
+ }
+ }
+
+
+ private void switchMode(ClockThemeUITypeEnum uiTypeEnum) {
+ themeUIViewModel.setClockUITypeEnum(uiTypeEnum);
+ }
+
+ private ClockThemeUITypeEnum getCurrentThemeMode() {
+ return themeUIViewModel.getClockUITypeEnum().getValue();
+ }
+
+ Integer flingWidth;
+ Integer flingHeight;
+
+ @Override
+ public boolean onFling(MotionEvent e1, MotionEvent e2, float v, float v1) {
+ if (isScreenLock() && !isFullScreen())
+ return true;
+
+ Log.d(TAG, "onFling");
+
+ int brightness = globalViewModel.getBrightness().getValue();
+
+ if(flingWidth==null)
+ calcFilingFlag();
+
+ if (e2.getY() - e1.getY() < -flingHeight) { // 从上至下
+ Log.d(TAG, "change brightness +10");
+ brightness = brightness + 10;
+ if (brightness >= 255) {
+ Toast.makeText(this, "最大亮度了", Toast.LENGTH_SHORT).show();
+ return true;
+ }
+ globalViewModel.getBrightness().setValue(brightness);
+ return true;
+ } else if (e2.getY() - e1.getY() > flingHeight) { // 从下至上
+ Log.d(TAG, "change brightness -10");
+ brightness = brightness - 10;
+ if (brightness <= 0) {
+ Toast.makeText(this, "最小亮度了", Toast.LENGTH_SHORT).show();
+ return true;
+ }
+ globalViewModel.getBrightness().setValue(brightness);
+ return true;
+ } else if (e2.getX() - e1.getX() > flingWidth) { // 从左向右滑动(左进右出)
+ Log.d(TAG, "left->right");
+ if (globalViewModel.getClockInterfaceTypeEnum().getValue() == ClockInterfaceTypeEnum.Simulate) {
+ simulateViewModel.setClockTypeName(ClockFactory.nextSimulateClockName(simulateViewModel.getClockTypeName().getValue()));
+ return true;
+ }
+ digitViewModel.setTimeFontStyle(fontManager.nextFont());
+ return true;
+ } else if (e2.getX() - e1.getX() < -flingWidth) { // 从右向左滑动(右进左出)
+ nextBackGroundAnimator();
+ return true;
+ }
+ return false;
+ }
+
+
+ @Override
+ public boolean onSingleTapConfirmed(MotionEvent e) {
+ return false;
+ }
+
+
+ @Override
+ public boolean onDoubleTap(MotionEvent e) {
+ changeThemeUI();
+ return true;
+ }
+
@Override
public boolean onDoubleTapEvent(MotionEvent e) {
return false;
}
- @Override
- public boolean onScale(ScaleGestureDetector detector) {
- float span=detector.getCurrentSpan();
- Log.d(TAG,"onScale span:"+span);
- return false;
- }
- float scaleSpan=0;
+ float scaleSpan = 0;
+ int currentFontSize;
+ //int maxFontSize;
@Override
public boolean onScaleBegin(ScaleGestureDetector detector) {
- Log.d(TAG,"onScaleBegin ");
- scaleSpan=detector.getCurrentSpan();
+ Log.d(TAG, "onScaleBegin ");
+ scaleSpan = detector.getCurrentSpan();
+ currentFontSize=digitViewModel.getTimeFontStyleSize().getValue();
+ //maxFontSize = fontManager.getMaxFontSize(model.isDisplaySecond());
return true;
}
@Override
- public void onScaleEnd(ScaleGestureDetector detector) {
- //float fontScale = getResources().getDisplayMetrics().scaledDensity;
- float span=detector.getCurrentSpan()-scaleSpan;
- int step=new Float(span/30).intValue();
- int maxFontSize=fontManager.getMaxFontSize(model.isDisplaySecond());
- int currentFontSize=digitViewModel.getTimeFontStyleSize().getValue();
- currentFontSize=currentFontSize+step;
+ public boolean onScale(ScaleGestureDetector detector) {
- Log.d(TAG,"onScaleEnd span:"+span+"\t step:"+step+"\tcurrent text size"+currentFontSize+"\t max text size:"+maxFontSize+"\t");
+ float span = detector.getCurrentSpan() - scaleSpan;
+ int step = new Float(span / 30).intValue();
+
+ currentFontSize = currentFontSize + step;
+
+ Log.d(TAG, "onScaleEnd span:" + span + "\t step:" + step + "\tcurrent text size" + currentFontSize);
- fontManager.updateCurrentFontSize(isFullScreen(),model.isDisplaySecond(),currentFontSize);
digitViewModel.setTimeFontStyleSize(currentFontSize);
+
+ return false;
+ }
+
+ @Override
+ public void onScaleEnd(ScaleGestureDetector detector) {
+ fontManager.updateCurrentFontSize(isFullScreen(), model.isDisplaySecond(), currentFontSize);
}
@@ -786,12 +816,12 @@ public class MainActivity extends AppCompatActivity implements android.view.Ges
return systemBrightness;
}
- public String getnum(int num1,int num2){
+ public String getnum(int num1, int num2) {
NumberFormat numberFormat = NumberFormat.getInstance();
// 设置精确到小数点后0位
numberFormat.setMaximumFractionDigits(0);
String result = numberFormat.format((float) num1 / (float) num2 * 100);
- return result+"%";
+ return result + "%";
}
public ClockStateMachine getClockStateMachine() {
@@ -802,4 +832,15 @@ public class MainActivity extends AppCompatActivity implements android.view.Ges
public AlterManager getAlterManager() {
return alterManager;
}
+
+
+ private void calcFilingFlag() {
+ Point outSize=new Point();
+ WindowManager windowManager = getWindowManager();
+ Display display = windowManager.getDefaultDisplay();
+ display.getSize(outSize);
+ flingWidth=outSize.x/3;
+ flingHeight =outSize.y/3;
+ //Log.d(TAG,"calc filing flag flingWidth:"+flingWidth+"\tflingHeight"+flingHeight);
+ }
}
diff --git a/app/src/main/java/clock/socoolby/com/clock/ThemeUIManager.java b/app/src/main/java/clock/socoolby/com/clock/ThemeUIManager.java
index eececc9..932ac92 100644
--- a/app/src/main/java/clock/socoolby/com/clock/ThemeUIManager.java
+++ b/app/src/main/java/clock/socoolby/com/clock/ThemeUIManager.java
@@ -7,15 +7,19 @@ import com.openbravo.data.basic.BasicException;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.List;
+import java.util.UUID;
import clock.socoolby.com.clock.dao.base.ThemeUI;
import clock.socoolby.com.clock.model.DigitPerferenceModel;
import clock.socoolby.com.clock.model.SharePerferenceModel;
import clock.socoolby.com.clock.model.SimulatePerferenceModel;
import clock.socoolby.com.clock.state.ClockInterfaceTypeEnum;
+import clock.socoolby.com.clock.state.ClockThemeUITypeEnum;
import e.odbo.data.dao.EntityManager;
import e.odbo.data.dsl.query.QBF;
+import static clock.socoolby.com.clock.state.ClockThemeUITypeEnum.FULLSCREEN;
+
public class ThemeUIManager{
public static final String TAG = ThemeUIManager.class.getSimpleName();
@@ -24,11 +28,14 @@ public class ThemeUIManager{
SharePerferenceModel model;
+ FontManager fontManager;
+
private String tempThemeStr=null;
- public ThemeUIManager(EntityManager entityManager,SharePerferenceModel model) {
+ public ThemeUIManager(EntityManager entityManager,SharePerferenceModel model,FontManager fontManager) {
this.entityManager = entityManager;
this.model=model;
+ this.fontManager=fontManager;
}
public void loadDigitThemeFromDB(String name) throws BasicException {
@@ -75,6 +82,7 @@ public class ThemeUIManager{
ThemeUI themeUI=findThemeUIFromDB(name,ClockInterfaceTypeEnum.Digit.code);
if(themeUI==null){
themeUI=new ThemeUI();
+ themeUI.setId(UUID.randomUUID().toString());
themeUI.setName(name);
themeUI.setClockType(ClockInterfaceTypeEnum.Digit.code);
themeUI.setConfigText(makeSaveDigitThemeString(model.getDigitPerferenceModel()));
@@ -100,6 +108,7 @@ public class ThemeUIManager{
ThemeUI themeUI=findThemeUIFromDB(name,ClockInterfaceTypeEnum.Simulate.code);
if(themeUI==null){
themeUI=new ThemeUI();
+ themeUI.setId(UUID.randomUUID().toString());
themeUI.setName(name);
themeUI.setClockType(ClockInterfaceTypeEnum.Simulate.code);
themeUI.setConfigText(makeSaveSimulateThemeString(model.getSimulatePerferenceModel()));
@@ -154,4 +163,20 @@ public class ThemeUIManager{
loadSimulateTheme(tempThemeStr);
}
}
+
+ public void loadThemeFromNet(ThemeUI netTheme)throws BasicException{
+ if(netTheme==null)
+ return;
+ int clockType=netTheme.getClockType();
+ if(clockType==ClockInterfaceTypeEnum.Digit.code) {
+ loadDigitTheme(netTheme.getConfigText());
+ fontManager.updateFontSize(model.getFontName(),isFullScreen(), model.isDisplaySecond(), model.getFontStyleSize());
+ }else if(clockType==ClockInterfaceTypeEnum.Simulate.code)
+ loadSimulateTheme(netTheme.getConfigText());
+ model.setClockInterfaceType(clockType);
+ }
+
+ private boolean isFullScreen() {
+ return ClockThemeUITypeEnum.valueOf(model.getThemeUIType()) == FULLSCREEN;
+ }
}
diff --git a/app/src/main/java/clock/socoolby/com/clock/db/WorkClockDatabase.java b/app/src/main/java/clock/socoolby/com/clock/db/WorkClockDatabase.java
index f6f76ad..27eb2e7 100644
--- a/app/src/main/java/clock/socoolby/com/clock/db/WorkClockDatabase.java
+++ b/app/src/main/java/clock/socoolby/com/clock/db/WorkClockDatabase.java
@@ -7,7 +7,6 @@ import e.odbo.data.model.DataBase;
import e.odbo.data.model.Table;
import e.odbo.data.model.TableData;
import e.odbo.data.model.smaple.PK;
-import e.odbo.data.model.smaple.TimeLogAble;
public class WorkClockDatabase extends DataBase {
public WorkClockDatabase() {
diff --git a/app/src/main/java/clock/socoolby/com/clock/fragment/AbstractAnimatorFragment.java b/app/src/main/java/clock/socoolby/com/clock/fragment/AbstractAnimatorFragment.java
new file mode 100644
index 0000000..750935b
--- /dev/null
+++ b/app/src/main/java/clock/socoolby/com/clock/fragment/AbstractAnimatorFragment.java
@@ -0,0 +1,54 @@
+package clock.socoolby.com.clock.fragment;
+
+import android.os.Bundle;
+
+import androidx.fragment.app.Fragment;
+import androidx.lifecycle.ViewModelProviders;
+
+import clock.socoolby.com.clock.ClockApplication;
+import clock.socoolby.com.clock.viewmodel.GlobalViewModel;
+import clock.socoolby.com.clock.viewmodel.ViewModelFactory;
+import clock.socoolby.com.clock.widget.animatorview.AnimatorView;
+import clock.socoolby.com.clock.widget.animatorview.I_Animator;
+
+public abstract class AbstractAnimatorFragment extends Fragment {
+
+ protected GlobalViewModel globalViewModel;
+
+ protected AnimatorView animatorView;
+
+ protected I_Animator animator;
+
+ public AbstractAnimatorFragment(I_Animator animator) {
+ this.animator = animator;
+ }
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ globalViewModel= ViewModelProviders.of(getActivity(), new ViewModelFactory(ClockApplication.getInstance().getModel())).get(GlobalViewModel.class);
+ }
+
+
+ protected void initAnimatorView(AnimatorView animatorView){
+ this.animatorView=animatorView;
+ animator.init(getActivity(),animatorView);
+ animatorView.setAnimator(animator);
+ }
+
+ @Override
+ public void onResume() {
+ super.onResume();
+ animatorView.start();
+ }
+
+
+ @Override
+ public void onPause() {
+ super.onPause();
+ animatorView.pause();
+ }
+
+ protected abstract void bindViewModel();
+
+}
diff --git a/app/src/main/java/clock/socoolby/com/clock/fragment/AbstractVideoFragment.java b/app/src/main/java/clock/socoolby/com/clock/fragment/AbstractVideoFragment.java
new file mode 100644
index 0000000..2b8cdc2
--- /dev/null
+++ b/app/src/main/java/clock/socoolby/com/clock/fragment/AbstractVideoFragment.java
@@ -0,0 +1,117 @@
+package clock.socoolby.com.clock.fragment;
+
+import android.content.res.AssetFileDescriptor;
+import android.graphics.SurfaceTexture;
+import android.media.AudioManager;
+import android.media.MediaPlayer;
+import android.os.Bundle;
+import android.view.Surface;
+import android.view.TextureView;
+import android.view.View;
+
+import androidx.fragment.app.Fragment;
+import androidx.lifecycle.ViewModelProviders;
+
+import java.io.IOException;
+
+import clock.socoolby.com.clock.ClockApplication;
+import clock.socoolby.com.clock.utils.Player;
+import clock.socoolby.com.clock.viewmodel.GlobalViewModel;
+import clock.socoolby.com.clock.viewmodel.ViewModelFactory;
+
+public abstract class AbstractVideoFragment extends Fragment {
+ protected String videoFileName;
+
+ protected MediaPlayer mediaPlayer;
+
+ protected int fileLocal=0;//0-》自定,1-》assets
+
+ public AbstractVideoFragment(String videoFileName) {
+ this.videoFileName = videoFileName;
+ }
+
+ public AbstractVideoFragment() {
+ }
+
+
+ @Override
+ public void onResume() {
+ super.onResume();
+ Player.getInstance().setPlayAble(false);
+ try {
+ if(fileLocal==1) {
+ AssetFileDescriptor fd = getActivity().getAssets().openFd(videoFileName);
+ mediaPlayer.setDataSource(fd.getFileDescriptor(), fd.getStartOffset(), fd.getLength());
+ }else
+ mediaPlayer.setDataSource(videoFileName);
+ mediaPlayer.prepare();
+ mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
+ @Override
+ public void onCompletion(MediaPlayer mp) {
+ mp.seekTo(0);
+ mp.stop();
+ onPlayCompletion();
+ }
+ });
+ mediaPlayer.start();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ protected void initMediaPlay(TextureView textureView){
+ mediaPlayer=new MediaPlayer();
+ mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
+ textureView.setSurfaceTextureListener(new TextureView.SurfaceTextureListener() {
+ @Override
+ public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) {
+ // SurfaceTexture准备就绪
+ mediaPlayer.setSurface(new Surface(surface));
+ }
+
+ @Override
+ public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) {
+ // SurfaceTexture缓冲大小变化
+ }
+
+ @Override
+ public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) {
+ // SurfaceTexture即将被销毁
+ return false;
+ }
+
+ @Override
+ public void onSurfaceTextureUpdated(SurfaceTexture surface) {
+ // SurfaceTexture通过updateImage更新
+ }
+ });
+ textureView.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ textureViewClick();
+ }
+ });
+ }
+
+ protected abstract void onPlayCompletion();
+
+ protected void textureViewClick(){
+
+ }
+
+ @Override
+ public void onPause() {
+ super.onPause();
+ mediaPlayer.pause();
+
+ }
+
+ @Override
+ public void onStop() {
+ super.onStop();
+ if(mediaPlayer.isPlaying())
+ mediaPlayer.stop();
+ mediaPlayer.release();
+ Player.getInstance().setPlayAble(true);
+ }
+}
diff --git a/app/src/main/java/clock/socoolby/com/clock/fragment/digit/DigitClockConfigFragment.java b/app/src/main/java/clock/socoolby/com/clock/fragment/digit/DigitClockConfigFragment.java
index 042544c..33ed541 100644
--- a/app/src/main/java/clock/socoolby/com/clock/fragment/digit/DigitClockConfigFragment.java
+++ b/app/src/main/java/clock/socoolby/com/clock/fragment/digit/DigitClockConfigFragment.java
@@ -35,6 +35,7 @@ import clock.socoolby.com.clock.state.ClockInterfaceTypeEnum;
import clock.socoolby.com.clock.utils.DialogUtils;
import clock.socoolby.com.clock.viewmodel.DigitViewModel;
import clock.socoolby.com.clock.viewmodel.GlobalViewModel;
+import clock.socoolby.com.clock.viewmodel.ThemeUIViewModel;
import clock.socoolby.com.clock.viewmodel.ViewModelFactory;
import clock.socoolby.com.clock.widget.textview.ShadowTypeEnum;
import clock.socoolby.com.clock.widget.textview.charanimator.CharAnimatorEnum;
@@ -47,7 +48,7 @@ public class DigitClockConfigFragment extends Fragment {
DigitViewModel digitViewModel;
GlobalViewModel globalViewModel;
-
+ ThemeUIViewModel themeUIViewModel;
ThemeUIManager themeUIManager;
@BindView(R.id.tv_hourSystem12)
@@ -146,6 +147,7 @@ public class DigitClockConfigFragment extends Fragment {
super.onCreate(savedInstanceState);
globalViewModel = ViewModelProviders.of(getActivity(), new ViewModelFactory(ClockApplication.getInstance().getModel())).get(GlobalViewModel.class);
digitViewModel = ViewModelProviders.of(getActivity(), new ViewModelFactory(ClockApplication.getInstance().getModel())).get(DigitViewModel.class);
+ themeUIViewModel=ViewModelProviders.of(getActivity(), new ViewModelFactory(ClockApplication.getInstance().getModel())).get(ThemeUIViewModel.class);
themeUIManager.saveTempThemeUI(ClockInterfaceTypeEnum.Digit.code);
globalViewModel.setAppConfig(true);
}
@@ -164,7 +166,8 @@ public class DigitClockConfigFragment extends Fragment {
view.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
- getFragmentManager().popBackStack();
+ //getFragmentManager().popBackStack();
+ themeUIViewModel.loadFromModel();
return true;
}
});
diff --git a/app/src/main/java/clock/socoolby/com/clock/fragment/digit/DigitClockFragment.java b/app/src/main/java/clock/socoolby/com/clock/fragment/digit/DigitClockFragment.java
index 0a29fb8..ee29c24 100644
--- a/app/src/main/java/clock/socoolby/com/clock/fragment/digit/DigitClockFragment.java
+++ b/app/src/main/java/clock/socoolby/com/clock/fragment/digit/DigitClockFragment.java
@@ -6,6 +6,7 @@ import androidx.fragment.app.Fragment;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProviders;
+import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -28,6 +29,7 @@ import clock.socoolby.com.clock.widget.textview.charanimator.CharAnimatorEnum;
* create an instance of this fragment.
*/
public class DigitClockFragment extends Fragment {
+ public static final String TAG=DigitClockFragment.class.getName();
public DigitClockFragment() {
// Required empty public constructor
@@ -41,6 +43,7 @@ public class DigitClockFragment extends Fragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
+ Log.d(TAG,"onCreate..");
digitViewModel= ViewModelProviders.of(getActivity(), new ViewModelFactory(ClockApplication.getInstance().getModel())).get(DigitViewModel.class);
globalViewModel=ViewModelProviders.of(getActivity(), new ViewModelFactory(ClockApplication.getInstance().getModel())).get(GlobalViewModel.class);
}
diff --git a/app/src/main/java/clock/socoolby/com/clock/fragment/houranimator/HourAnimatorFactory.java b/app/src/main/java/clock/socoolby/com/clock/fragment/houranimator/HourAnimatorFactory.java
index df6c574..722506a 100644
--- a/app/src/main/java/clock/socoolby/com/clock/fragment/houranimator/HourAnimatorFactory.java
+++ b/app/src/main/java/clock/socoolby/com/clock/fragment/houranimator/HourAnimatorFactory.java
@@ -1,16 +1,20 @@
package clock.socoolby.com.clock.fragment.houranimator;
+import androidx.fragment.app.Fragment;
+
import clock.socoolby.com.clock.widget.animatorview.I_Animator;
import clock.socoolby.com.clock.widget.animatorview.animator.FerrisWheelAnimator;
import clock.socoolby.com.clock.widget.animatorview.animator.FishAnimator;
import clock.socoolby.com.clock.widget.animatorview.animator.WindmillAnimator;
public final class HourAnimatorFactory {
+ public static final String DEFAULT="default";
+
public static boolean isHourAnimator(String typeName){
- return !"default".equalsIgnoreCase(typeName);
+ return !DEFAULT.equalsIgnoreCase(typeName);
}
- public static HourAnimatorFragment builder(String typeName,int hour){
+ public static Fragment builder(String typeName, int hour){
I_Animator animator=null;
switch (typeName){
case FerrisWheelAnimator.NAME:
@@ -18,6 +22,8 @@ public final class HourAnimatorFactory {
case FishAnimator.NAME:
animator=new FishAnimator(hour>12?hour-12:hour);
break;
+ case HourVideoFragment.NAME:
+ return new HourVideoFragment(hour);
default:
animator=new WindmillAnimator(hour>12?hour-12:hour);
}
diff --git a/app/src/main/java/clock/socoolby/com/clock/fragment/houranimator/HourAnimatorFragment.java b/app/src/main/java/clock/socoolby/com/clock/fragment/houranimator/HourAnimatorFragment.java
index b23d4af..e8bcc11 100644
--- a/app/src/main/java/clock/socoolby/com/clock/fragment/houranimator/HourAnimatorFragment.java
+++ b/app/src/main/java/clock/socoolby/com/clock/fragment/houranimator/HourAnimatorFragment.java
@@ -1,48 +1,32 @@
package clock.socoolby.com.clock.fragment.houranimator;
-
import android.os.Bundle;
-
import androidx.fragment.app.Fragment;
import androidx.lifecycle.Observer;
-import androidx.lifecycle.ViewModelProviders;
-
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
-
-import clock.socoolby.com.clock.ClockApplication;
import clock.socoolby.com.clock.R;
-import clock.socoolby.com.clock.viewmodel.GlobalViewModel;
-import clock.socoolby.com.clock.viewmodel.ViewModelFactory;
-import clock.socoolby.com.clock.widget.animatorview.AnimatorView;
+import clock.socoolby.com.clock.fragment.AbstractAnimatorFragment;
import clock.socoolby.com.clock.widget.animatorview.I_Animator;
/**
* A simple {@link Fragment} subclass.
*/
-public class HourAnimatorFragment extends Fragment {
-
- GlobalViewModel globalViewModel;
-
- AnimatorView animatorView;
+public class HourAnimatorFragment extends AbstractAnimatorFragment {
private int animatorDialy;
- I_Animator hourAnimator;
-
Observer heartbeatObserver;
public HourAnimatorFragment(I_Animator hourAnimator) {
- this.hourAnimator=hourAnimator;
+ super(hourAnimator);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- globalViewModel=ViewModelProviders.of(getActivity(), new ViewModelFactory(ClockApplication.getInstance().getModel())).get(GlobalViewModel.class);
-
heartbeatObserver=new Observer() {
@Override
public void onChanged(Boolean aBoolean) {
@@ -62,11 +46,9 @@ public class HourAnimatorFragment extends Fragment {
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view=inflater.inflate(R.layout.fragment_hour_animator, container, false);
- animatorView=view.findViewById(R.id.tv_hour_animatorview);
+ initAnimatorView(view.findViewById(R.id.tv_hour_animatorview));
bindViewModel();
- Log.d("hourAnimator fragment","on create animator view width:"+animatorView.getWidth());
- hourAnimator.init(getActivity(),animatorView);
- animatorView.setAnimator(hourAnimator);
+ //Log.d("animator fragment","on create animator view width:"+animatorView.getWidth());
return view;
}
@@ -75,7 +57,6 @@ public class HourAnimatorFragment extends Fragment {
public void onResume() {
super.onResume();
globalViewModel.getHeartbeat().observe(getActivity(),heartbeatObserver);
- animatorView.start();
}
@@ -83,12 +64,10 @@ public class HourAnimatorFragment extends Fragment {
public void onPause() {
super.onPause();
globalViewModel.getHeartbeat().removeObserver(heartbeatObserver);
- animatorView.pause();
}
- private void bindViewModel(){
+ protected void bindViewModel(){
animatorDialy=globalViewModel.getTimeHourAnimatordialy().getValue();
-
globalViewModel.getForegroundColor().observe(getActivity(), new Observer() {
@Override
public void onChanged(Integer integer) {
diff --git a/app/src/main/java/clock/socoolby/com/clock/fragment/houranimator/HourVideoFragment.java b/app/src/main/java/clock/socoolby/com/clock/fragment/houranimator/HourVideoFragment.java
new file mode 100644
index 0000000..c759fa4
--- /dev/null
+++ b/app/src/main/java/clock/socoolby/com/clock/fragment/houranimator/HourVideoFragment.java
@@ -0,0 +1,60 @@
+package clock.socoolby.com.clock.fragment.houranimator;
+
+import android.os.Bundle;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.lifecycle.ViewModelProviders;
+
+import clock.socoolby.com.clock.ClockApplication;
+import clock.socoolby.com.clock.R;
+import clock.socoolby.com.clock.fragment.AbstractVideoFragment;
+import clock.socoolby.com.clock.viewmodel.GlobalViewModel;
+import clock.socoolby.com.clock.viewmodel.ViewModelFactory;
+
+public class HourVideoFragment extends AbstractVideoFragment {
+
+ public static final String NAME="video";
+
+ protected int hour;
+
+ protected GlobalViewModel globalViewModel;
+
+ public HourVideoFragment(int hour) {
+ super();
+ this.hour=hour;
+ }
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ globalViewModel= ViewModelProviders.of(getActivity(), new ViewModelFactory(ClockApplication.getInstance().getModel())).get(GlobalViewModel.class);
+ }
+
+
+ @Nullable
+ @Override
+ public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
+ View view= inflater.inflate(R.layout.fragment_hour_video,container,false);
+ initMediaPlay(view.findViewById(R.id.tv_hour_video));
+ loadForModel();
+ return view;
+ }
+
+ protected void loadForModel(){
+ videoFileName= globalViewModel.getTimeHourVideoPath();
+ if(videoFileName==null||videoFileName.isEmpty()){
+ this.videoFileName="test.3gp";
+ this.fileLocal=1;
+ }
+ }
+
+ @Override
+ protected void onPlayCompletion() {
+ globalViewModel.setTimeHourAnimatorStarting(false);
+ //getActivity().onBackPressed();
+ }
+}
diff --git a/app/src/main/java/clock/socoolby/com/clock/fragment/simulate/SimulateClockConfigFragment.java b/app/src/main/java/clock/socoolby/com/clock/fragment/simulate/SimulateClockConfigFragment.java
index b9723f3..f4eddbd 100644
--- a/app/src/main/java/clock/socoolby/com/clock/fragment/simulate/SimulateClockConfigFragment.java
+++ b/app/src/main/java/clock/socoolby/com/clock/fragment/simulate/SimulateClockConfigFragment.java
@@ -28,6 +28,7 @@ import clock.socoolby.com.clock.state.ClockInterfaceTypeEnum;
import clock.socoolby.com.clock.utils.DialogUtils;
import clock.socoolby.com.clock.viewmodel.GlobalViewModel;
import clock.socoolby.com.clock.viewmodel.SimulateViewModel;
+import clock.socoolby.com.clock.viewmodel.ThemeUIViewModel;
import clock.socoolby.com.clock.viewmodel.ViewModelFactory;
import clock.socoolby.com.clock.widget.animatorview.animator.clockanimator.pointer.DefaultPointer;
import clock.socoolby.com.clock.widget.animatorview.animator.clockanimator.pointer.LeafPointer;
@@ -45,8 +46,11 @@ public class SimulateClockConfigFragment extends Fragment {
ThemeUIManager themeUIManager;
+
SimulateViewModel simulateViewModel;
GlobalViewModel globalViewModel;
+ ThemeUIViewModel themeUIViewModel;
+
@BindView(R.id.tv_simulate_color_pointer)
Button tvSimulateColorPointer;
@BindView(R.id.tv_simulate_color_scale)
@@ -111,6 +115,7 @@ public class SimulateClockConfigFragment extends Fragment {
super.onCreate(savedInstanceState);
globalViewModel = ViewModelProviders.of(getActivity(), new ViewModelFactory(ClockApplication.getInstance().getModel())).get(GlobalViewModel.class);
simulateViewModel = ViewModelProviders.of(getActivity(), new ViewModelFactory(ClockApplication.getInstance().getModel())).get(SimulateViewModel.class);
+ themeUIViewModel=ViewModelProviders.of(getActivity(), new ViewModelFactory(ClockApplication.getInstance().getModel())).get(ThemeUIViewModel.class);
themeUIManager.saveTempThemeUI(ClockInterfaceTypeEnum.Simulate.code);
globalViewModel.setAppConfig(true);
}
@@ -129,7 +134,8 @@ public class SimulateClockConfigFragment extends Fragment {
view.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
- getFragmentManager().popBackStack();
+ //getFragmentManager().popBackStack();
+ themeUIViewModel.loadFromModel();
return true;
}
});
@@ -278,7 +284,6 @@ public class SimulateClockConfigFragment extends Fragment {
String styleName = "simulate_style_" + order;
try {
if (themeUIManager.exitsThemeUIStyle(ClockInterfaceTypeEnum.Simulate.code, styleName)) {
-
themeUIManager.loadSimulateThemeFromDB(styleName);
reloadViewModel();
} else {
@@ -314,7 +319,8 @@ public class SimulateClockConfigFragment extends Fragment {
private void reloadViewModel(){
globalViewModel.loadFromModel();
- simulateViewModel.loadFromModel();
+ //simulateViewModel.loadFromModel();
+ //loadForViewModel();
}
private void bindViewModel() {
diff --git a/app/src/main/java/clock/socoolby/com/clock/fragment/SystemAppConfigFragment.java b/app/src/main/java/clock/socoolby/com/clock/fragment/system/SystemAppConfigFragment.java
similarity index 71%
rename from app/src/main/java/clock/socoolby/com/clock/fragment/SystemAppConfigFragment.java
rename to app/src/main/java/clock/socoolby/com/clock/fragment/system/SystemAppConfigFragment.java
index e7f4586..e2f3c43 100644
--- a/app/src/main/java/clock/socoolby/com/clock/fragment/SystemAppConfigFragment.java
+++ b/app/src/main/java/clock/socoolby/com/clock/fragment/system/SystemAppConfigFragment.java
@@ -1,4 +1,4 @@
-package clock.socoolby.com.clock.fragment;
+package clock.socoolby.com.clock.fragment.system;
import android.app.admin.DevicePolicyManager;
import android.content.ComponentName;
@@ -18,16 +18,23 @@ import android.widget.RadioGroup;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.ViewModelProviders;
+import com.luck.picture.lib.PictureSelector;
+import com.luck.picture.lib.config.PictureConfig;
+import com.luck.picture.lib.config.PictureMimeType;
+
import clock.socoolby.com.clock.AboutActivity;
import clock.socoolby.com.clock.ActivateAdmin;
import clock.socoolby.com.clock.ClockApplication;
import clock.socoolby.com.clock.Constants;
import clock.socoolby.com.clock.R;
+import clock.socoolby.com.clock.fragment.houranimator.HourAnimatorFactory;
+import clock.socoolby.com.clock.fragment.houranimator.HourVideoFragment;
import clock.socoolby.com.clock.model.DateModel;
import clock.socoolby.com.clock.model.SharePerferenceModel;
import clock.socoolby.com.clock.utils.FuncUnit;
import clock.socoolby.com.clock.viewmodel.GlobalViewModel;
import clock.socoolby.com.clock.viewmodel.ViewModelFactory;
+import clock.socoolby.com.clock.widget.animatorview.animator.FishAnimator;
import clock.socoolby.com.clock.widget.wheelview.WheelView;
import clock.socoolby.com.clock.widget.wheelview.adapters.ArrayWheelAdapter;
@@ -53,6 +60,16 @@ public class SystemAppConfigFragment extends Fragment implements View.OnClickLi
Button btn_about;
Button btn_save;
+ RadioGroup rg_clock_hour_animator_group;
+ RadioButton rg_clock_hour_animator_null;
+ RadioButton rg_clock_hour_animator_flash;
+ RadioButton rg_clock_hour_video;
+
+ Button btn_clock_hour_video;
+
+
+ CheckBox cb_boot_start;
+
private SharePerferenceModel model;
public SystemAppConfigFragment(SharePerferenceModel model) {
@@ -82,8 +99,32 @@ public class SystemAppConfigFragment extends Fragment implements View.OnClickLi
et_city =themeRootView.findViewById(R.id.et_city);
et_description = themeRootView.findViewById(R.id.et_description);
+ rg_clock_hour_animator_group=themeRootView.findViewById(R.id.rg_clock_hour_animator_group);
+ rg_clock_hour_animator_null=themeRootView.findViewById(R.id.rg_clock_hour_animator_null);
+ rg_clock_hour_animator_flash=themeRootView.findViewById(R.id.rg_clock_hour_animator_flash);
+ rg_clock_hour_video=themeRootView.findViewById(R.id.rg_clock_hour_video);
+ btn_clock_hour_video=themeRootView.findViewById(R.id.btn_clock_hour_video);
+
+
+ cb_boot_start=themeRootView.findViewById(R.id.cb_boot_start);
cb_tick = themeRootView.findViewById(R.id.cb_tick);
+ cb_trigger_screen = themeRootView.findViewById(R.id.cb_trigger_screen);
+ btn_uninstall = themeRootView.findViewById(R.id.btn_uninstall);
+ btn_about = themeRootView.findViewById(R.id.btn_about);
+ btn_save= themeRootView.findViewById(R.id.btn_save);
+
+ loadDataFromModel();
+
+ btn_about.setOnClickListener(this);
+ btn_uninstall.setOnClickListener(this);
+ btn_save.setOnClickListener(this);
+ cb_trigger_screen.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
+ @Override
+ public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
+ model.setTriggerScreen(isChecked);
+ }
+ });
cb_tick.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
@@ -92,37 +133,39 @@ public class SystemAppConfigFragment extends Fragment implements View.OnClickLi
}
});
- cb_trigger_screen = themeRootView.findViewById(R.id.cb_trigger_screen);
-
- cb_trigger_screen.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
+ cb_boot_start.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
- model.setTriggerScreen(isChecked);
+ model.setBootStart(isChecked);
}
});
- btn_uninstall = themeRootView.findViewById(R.id.btn_uninstall);
- btn_uninstall.setOnClickListener(this);
- btn_about = themeRootView.findViewById(R.id.btn_about);
- btn_about.setOnClickListener(this);
+ rg_clock_hour_animator_group.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
+ @Override
+ public void onCheckedChanged(RadioGroup group, int checkedId) {
+ btn_clock_hour_video.setVisibility(View.GONE);
+ switch (checkedId){
+ case R.id.rg_clock_hour_animator_null:
+ model.setTimeHourAlterTypeName(HourAnimatorFactory.DEFAULT);
+ break;
+ case R.id.rg_clock_hour_animator_flash:
+ model.setTimeHourAlterTypeName(FishAnimator.NAME);
+ break;
+ case R.id.rg_clock_hour_video:
+ model.setTimeHourAlterTypeName(HourVideoFragment.NAME);
+ btn_clock_hour_video.setVisibility(View.VISIBLE);
+ break;
+ }
+ }
+ });
- btn_save= themeRootView.findViewById(R.id.btn_save);
- btn_save.setOnClickListener(this);
-
- for (int i = 0; i < 48; i++) {
- int hours = i / 2;
- int minutes = i % 2 * 30;
- String timeString = String.format("%02d:%02d", hours, (minutes + 1));
- listTime[i] = timeString;
- }
+ btn_clock_hour_video.setOnClickListener(this);
ArrayWheelAdapter timeAdpater = new ArrayWheelAdapter(getContext(), listTime);
weel_startTime.setViewAdapter(timeAdpater);
ArrayWheelAdapter durationAdapter = new ArrayWheelAdapter(getContext(), listTime);
weel_stopTime.setViewAdapter(durationAdapter);
- loadDataFromModel();
-
rg_taking_clock.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup radioGroup, int index) {
@@ -143,7 +186,6 @@ public class SystemAppConfigFragment extends Fragment implements View.OnClickLi
}
});
-
return themeRootView;
}
@@ -154,6 +196,14 @@ public class SystemAppConfigFragment extends Fragment implements View.OnClickLi
}
private void loadDataFromModel() {
+
+ for (int i = 0; i < 48; i++) {
+ int hours = i / 2;
+ int minutes = i % 2 * 30;
+ String timeString = String.format("%02d:%02d", hours, (minutes + 1));
+ listTime[i] = timeString;
+ }
+
int startTimeIndex = indexOfTimeString(String.format("%02d:%02d", model.getStartHourPowerTime().getHour(), model.getStartHourPowerTime().getMinute()));
int stopTimeIndex = indexOfTimeString(String.format("%02d:%02d", model.getStopHourPowerTime().getHour(), model.getStopHourPowerTime().getMinute()));
weel_startTime.setCurrentItem(startTimeIndex);
@@ -176,6 +226,23 @@ public class SystemAppConfigFragment extends Fragment implements View.OnClickLi
}
et_city.setText(model.getCity());
et_description.setText(model.getDescription());
+
+ cb_boot_start.setChecked(model.isBootStart());
+
+ btn_clock_hour_video.setVisibility(View.GONE);
+
+ switch (model.getTimeHourAlterTypeName()){
+ case FishAnimator.NAME:
+ rg_clock_hour_animator_flash.setChecked(true);
+ break;
+ case HourVideoFragment.NAME:
+ btn_clock_hour_video.setVisibility(View.VISIBLE);
+ rg_clock_hour_video.setChecked(true);
+ btn_clock_hour_video.setText(model.getTimeHourVideoPath());
+ break;
+ default:
+ rg_clock_hour_animator_null.setChecked(true);
+ }
}
private void saveToModel() {
@@ -230,6 +297,18 @@ public class SystemAppConfigFragment extends Fragment implements View.OnClickLi
saveToModel();
getFragmentManager().popBackStack();
break;
+ case R.id.btn_clock_hour_video:
+ configHourVideo();
+ btn_clock_hour_video.setText(model.getTimeHourVideoPath());
+ break;
}
}
+
+ public void configHourVideo() {
+ PictureSelector.create(getActivity())
+ .openGallery(PictureMimeType.ofVideo())
+ .isCamera(false)
+ .imageSpanCount(4)
+ .forResult(PictureConfig.TYPE_VIDEO);
+ }
}
diff --git a/app/src/main/java/clock/socoolby/com/clock/fragment/AbstractThemeUIFragment.java b/app/src/main/java/clock/socoolby/com/clock/fragment/theme/AbstractThemeUIFragment.java
similarity index 95%
rename from app/src/main/java/clock/socoolby/com/clock/fragment/AbstractThemeUIFragment.java
rename to app/src/main/java/clock/socoolby/com/clock/fragment/theme/AbstractThemeUIFragment.java
index a2c3045..74e7220 100644
--- a/app/src/main/java/clock/socoolby/com/clock/fragment/AbstractThemeUIFragment.java
+++ b/app/src/main/java/clock/socoolby/com/clock/fragment/theme/AbstractThemeUIFragment.java
@@ -1,4 +1,4 @@
-package clock.socoolby.com.clock.fragment;
+package clock.socoolby.com.clock.fragment.theme;
import android.annotation.TargetApi;
import android.net.Uri;
@@ -23,7 +23,6 @@ import clock.socoolby.com.clock.ClockApplication;
import clock.socoolby.com.clock.FamousQuotesManager;
import clock.socoolby.com.clock.MainActivity;
import clock.socoolby.com.clock.R;
-import clock.socoolby.com.clock.SettingActivity;
import clock.socoolby.com.clock.model.DateModel;
import clock.socoolby.com.clock.model.SharePerferenceModel;
import clock.socoolby.com.clock.pop.CalendarPopup;
@@ -32,7 +31,6 @@ import clock.socoolby.com.clock.pop.TimeSetupMinPopup;
import clock.socoolby.com.clock.pop.TimeSetupPopup;
import clock.socoolby.com.clock.pop.WeatherPopup;
import clock.socoolby.com.clock.state.ClockInterfaceTypeEnum;
-import clock.socoolby.com.clock.state.ClockStateMachine;
import clock.socoolby.com.clock.state.ClockThemeUITypeEnum;
import clock.socoolby.com.clock.state.ClockTimeTypeEnum;
import clock.socoolby.com.clock.viewmodel.AlterViewModel;
@@ -68,7 +66,7 @@ public abstract class AbstractThemeUIFragment extends Fragment implements View.O
private ImageButton tv_foreground_color2;
private TextView tv_hand_time;
- //private boolean hand_time_visable=true;
+
private ImageButton tv_screen_lock;
ColorPickerPop colorPickerDialog;
@@ -142,8 +140,7 @@ public abstract class AbstractThemeUIFragment extends Fragment implements View.O
public boolean onLongClick(View v) {
if (isScreenLock())
return true;
- model.setHourSystem12(!model.isHourSystem12());
- globalViewModel.setHourSystem12(model.isHourSystem12());
+ globalViewModel.setHourSystem12(!model.isHourSystem12());
return true;
}
});
@@ -333,6 +330,7 @@ public abstract class AbstractThemeUIFragment extends Fragment implements View.O
@Override
public void onChanged(Boolean handUpAbla) {
if(handUpAbla) {
+ globalViewModel.getHandUpTime().setValue(model.getHandUpTime());
tv_handup.setColorFilter(globalViewModel.getForegroundColor().getValue());
tv_hand_time.setVisibility(View.VISIBLE);
}else{
@@ -398,22 +396,15 @@ public abstract class AbstractThemeUIFragment extends Fragment implements View.O
return globalViewModel.getHandUpAble().getValue();
}
- private void updateHourSystem() {
- if (model.isHourSystem12())
- tv_hours_system.setVisibility(View.VISIBLE);
- else
- tv_hours_system.setVisibility(View.GONE);
- }
- TimeSetupPopup handUpTimePopup1;
+ //TimeSetupPopup handUpTimePopup1;
private void setupHandUpTime() {
int saveHandUpTime=model.getHandUpTime();
int hour=0;
int minute=0;
- if(handUpTimePopup1==null) {
- handUpTimePopup1 = new TimeSetupPopup(mainActivity);
- handUpTimePopup1.setOnSeekBarChangeListener(new TimeSetupPopup.OnTimeChangeListener() {
+ TimeSetupPopup handUpTimePopup1 = new TimeSetupPopup();
+ handUpTimePopup1.setOnSeekBarChangeListener(new TimeSetupPopup.OnTimeChangeListener() {
@Override
public void onChanged(int hour, int minute, Uri uri, String s, String hundUpStyle) {
if (hour == 0 && minute == 0) {
@@ -429,13 +420,13 @@ public abstract class AbstractThemeUIFragment extends Fragment implements View.O
}
}
});
- }
if(saveHandUpTime>0){
hour=saveHandUpTime/60;
minute=saveHandUpTime-hour*60;
}
+ Log.d(TAG, "switch HandUpTime:" + saveHandUpTime+"\thour:"+hour+"\tminute:"+minute);
handUpTimePopup1.init(hour,minute,globalViewModel.getHandUpTypeName().getValue(),alterViewModel.getHandUpMusic().getValue(),alterViewModel.getHandUpMusicName().getValue());
- handUpTimePopup1.showNow(getFragmentManager(),"test");
+ handUpTimePopup1.showNow(getFragmentManager(),null);
}
private void setupTempHandUpTime() {
@@ -489,6 +480,7 @@ public abstract class AbstractThemeUIFragment extends Fragment implements View.O
}else{
handUpAbla=!handUpAbla;
globalViewModel.setHandUpAble(handUpAbla);
+ themeUIViewModel.setDescription(FamousQuotesManager.roundAutoQuotes());
}
break;
case R.id.tv_hand_time:
@@ -660,13 +652,6 @@ public abstract class AbstractThemeUIFragment extends Fragment implements View.O
return themeUIViewModel.getClockUITypeEnum().getValue()==ClockThemeUITypeEnum.FULLSCREEN;
}
- public void configThemeUITypeWithNoFullScreen(){
- if(globalViewModel.getClockInterfaceTypeEnum().getValue()==ClockInterfaceTypeEnum.Digit)
- themeUIViewModel.setClockUITypeEnum(ClockThemeUITypeEnum.NORMAL);
- else
- themeUIViewModel.setClockUITypeEnum(ClockThemeUITypeEnum.SETTING);
- }
-
public void screenLock(boolean locked) {
tv_screen_lock.setImageResource(locked ? R.drawable.ic_screen_lock : R.drawable.ic_screen_unlock);
diff --git a/app/src/main/java/clock/socoolby/com/clock/fragment/ThemeUIDefaultFragment.java b/app/src/main/java/clock/socoolby/com/clock/fragment/theme/ThemeUIDefaultFragment.java
similarity index 70%
rename from app/src/main/java/clock/socoolby/com/clock/fragment/ThemeUIDefaultFragment.java
rename to app/src/main/java/clock/socoolby/com/clock/fragment/theme/ThemeUIDefaultFragment.java
index 153659b..028a0ee 100644
--- a/app/src/main/java/clock/socoolby/com/clock/fragment/ThemeUIDefaultFragment.java
+++ b/app/src/main/java/clock/socoolby/com/clock/fragment/theme/ThemeUIDefaultFragment.java
@@ -1,4 +1,4 @@
-package clock.socoolby.com.clock.fragment;
+package clock.socoolby.com.clock.fragment.theme;
import clock.socoolby.com.clock.R;
@@ -12,7 +12,6 @@ public class ThemeUIDefaultFragment extends AbstractThemeUIFragment {
@Override
void changeThemeTypeCheck() {
- themeUIViewModel.getThemeName().setValue(ThemeUISampleFragment.THEME_NAME);
+ themeUIViewModel.setThemeName(ThemeUISampleFragment.THEME_NAME);
}
-
}
diff --git a/app/src/main/java/clock/socoolby/com/clock/fragment/ThemeUISampleFragment.java b/app/src/main/java/clock/socoolby/com/clock/fragment/theme/ThemeUISampleFragment.java
similarity index 69%
rename from app/src/main/java/clock/socoolby/com/clock/fragment/ThemeUISampleFragment.java
rename to app/src/main/java/clock/socoolby/com/clock/fragment/theme/ThemeUISampleFragment.java
index fb865aa..7ad8afb 100644
--- a/app/src/main/java/clock/socoolby/com/clock/fragment/ThemeUISampleFragment.java
+++ b/app/src/main/java/clock/socoolby/com/clock/fragment/theme/ThemeUISampleFragment.java
@@ -1,4 +1,4 @@
-package clock.socoolby.com.clock.fragment;
+package clock.socoolby.com.clock.fragment.theme;
import clock.socoolby.com.clock.R;
@@ -12,6 +12,6 @@ public class ThemeUISampleFragment extends AbstractThemeUIFragment {
@Override
void changeThemeTypeCheck() {
- themeUIViewModel.getThemeName().setValue(ThemeUIDefaultFragment.THEME_NAME);
+ themeUIViewModel.setThemeName(ThemeUIDefaultFragment.THEME_NAME);
}
}
diff --git a/app/src/main/java/clock/socoolby/com/clock/model/DigitPerferenceModel.java b/app/src/main/java/clock/socoolby/com/clock/model/DigitPerferenceModel.java
index b2bbd7c..b822245 100644
--- a/app/src/main/java/clock/socoolby/com/clock/model/DigitPerferenceModel.java
+++ b/app/src/main/java/clock/socoolby/com/clock/model/DigitPerferenceModel.java
@@ -9,6 +9,10 @@ public class DigitPerferenceModel {
protected final static String KEY_FONT_NAME = "key_font_name";
protected String fontName="default";
+ protected final static String KEY_FONT_STYLE_SIZE = "key_font_style_size";
+ protected Integer fontStyleSize =100;
+
+
protected final static String KEY_IS_LINEARGRADIENT_ABLE="key_time_text_is_linearGradient_able";
protected boolean linearGradientAble = false;
@@ -43,7 +47,7 @@ public class DigitPerferenceModel {
protected Integer charBackgroundBorderDividerStrokeWidth=10;
protected final static String KEY_TIME_TEXT_BASELINE_DOWN= "key_time_text_baseline_down";
- protected Integer baseLineDown=0;
+ protected Integer baseLineDown=13;
protected final static String KEY_TIME_TEXT_SUBSCRIPT_FONT_SCALE= "key_time_text_subscript_font_scale";
protected Integer subscriptFontScale=40;
@@ -63,11 +67,12 @@ public class DigitPerferenceModel {
shadowType=jsonObject.optInt(KEY_TIME_TEXT_SHADOW_TYPE,0);
timeTextCharAnimatorType=jsonObject.optInt(KEY_TIME_TEXT_CHAR_ANIMATOR_TYPE,0);
fontName=jsonObject.optString(KEY_FONT_NAME,"default");
+ fontStyleSize =jsonObject.optInt(KEY_FONT_STYLE_SIZE,100);
displaySecond = jsonObject.optBoolean(KEY_IS_DISPLAY_SECOND,false);
timeTextSecondSubscript=jsonObject.optBoolean(KEY_IS_DISPLAY_SECOND_SUBSCRIPT,true);
charBackgroundBorder=jsonObject.optBoolean(KEY_IS_CHAR_BACKGROUND_BORDER,false);
charBackgroundBorderColor=jsonObject.optInt(KEY_IS_CHAR_BACKGROUND_BORDER_COLOR, Color.BLACK);
- baseLineDown=jsonObject.optInt(KEY_TIME_TEXT_BASELINE_DOWN,0);
+ baseLineDown=jsonObject.optInt(KEY_TIME_TEXT_BASELINE_DOWN,13);
charBackgroundBorderDividerColor=jsonObject.optInt(KEY_IS_CHAR_BACKGROUND_BORDER_DIVIDER_COLOR, Color.BLACK);
charBackgroundBorderDividerStrokeWidth=jsonObject.optInt(KEY_IS_CHAR_BACKGROUND_BORDER_DIVIDER_STROKE_WIDTH, 10);
subscriptFontScale=jsonObject.optInt(KEY_TIME_TEXT_SUBSCRIPT_FONT_SCALE, 40);
@@ -83,6 +88,7 @@ public class DigitPerferenceModel {
jsonObject.put(KEY_TIME_TEXT_SHADOW_TYPE,shadowType);
jsonObject.put(KEY_TIME_TEXT_CHAR_ANIMATOR_TYPE,timeTextCharAnimatorType);
jsonObject.put(KEY_FONT_NAME,fontName);
+ jsonObject.put(KEY_FONT_STYLE_SIZE, fontStyleSize);
jsonObject.put(KEY_IS_DISPLAY_SECOND, displaySecond);
jsonObject.put(KEY_IS_DISPLAY_SECOND_SUBSCRIPT,timeTextSecondSubscript);
jsonObject.put(KEY_IS_CHAR_BACKGROUND_BORDER,charBackgroundBorder);
@@ -245,4 +251,12 @@ public class DigitPerferenceModel {
public void setCharBackgroundBorderWithDoubble(boolean charBackgroundBorderWithDoubble) {
this.charBackgroundBorderWithDoubble = charBackgroundBorderWithDoubble;
}
+
+ public Integer getFontStyleSize() {
+ return fontStyleSize;
+ }
+
+ public void setFontStyleSize(Integer fontStyleSize) {
+ this.fontStyleSize = fontStyleSize;
+ }
}
diff --git a/app/src/main/java/clock/socoolby/com/clock/model/SharePerferenceModel.java b/app/src/main/java/clock/socoolby/com/clock/model/SharePerferenceModel.java
index 31acbdc..3b8aaca 100755
--- a/app/src/main/java/clock/socoolby/com/clock/model/SharePerferenceModel.java
+++ b/app/src/main/java/clock/socoolby/com/clock/model/SharePerferenceModel.java
@@ -10,9 +10,7 @@ import java.io.Serializable;
import java.util.Timer;
import java.util.TimerTask;
-import clock.socoolby.com.clock.ClockApplication;
import clock.socoolby.com.clock.Constants;
-import clock.socoolby.com.clock.R;
import clock.socoolby.com.clock.utils.FileUtils;
public class SharePerferenceModel implements Serializable {
@@ -21,6 +19,9 @@ public class SharePerferenceModel implements Serializable {
public static final int DEFAULT_COLOR=Color.rgb(255, 255, 255);
+ protected boolean firstStart = true;
+ protected final static String KEY_FIRST_START = "key_first_start";
+
protected int typeHourPower = Constants.TALKING_HALF_AN_HOUR;
protected final static String KEY_TYPE_HOUR_POWER = "key_type_hour_power";
@@ -44,6 +45,10 @@ public class SharePerferenceModel implements Serializable {
protected final static String KEY_TIME_HOUR_ALTER_DIALY= "key_time_hour_alter_dialy";
protected Integer timeHourAlterDialy=20;
+ protected final static String KEY_TIME_HOUR_VIDEO_PATH= "key_time_hour_video_path";
+ protected String timeHourVideoPath="";
+
+
protected final static String KEY_CITY = "key_city";
protected String mCity="jinhua";
@@ -76,6 +81,7 @@ public class SharePerferenceModel implements Serializable {
protected final static String KEY_BACKGROUND_IMAGE="key_background_image";
protected String backgroundImage="";
+
protected final static String KEY_BACKGROUND_ANIMATOR="key_background_animator";
protected String backgroundAnimatorName="";
@@ -207,6 +213,8 @@ public class SharePerferenceModel implements Serializable {
}
public String getDescription() {
+ if(mDescription.isEmpty())
+ return Constants.APP_MEMO;
return mDescription;
}
@@ -218,12 +226,13 @@ public class SharePerferenceModel implements Serializable {
protected void fromJsonString(String jsonString) {
try {
JSONObject jsonObject = new JSONObject(jsonString);
+ firstStart=jsonObject.optBoolean(KEY_FIRST_START,true);
typeHourPower = jsonObject.getInt(KEY_TYPE_HOUR_POWER);
tickSound = jsonObject.getBoolean(KEY_IS_TICK_SOUND);
triggerScreen =jsonObject.optBoolean(KEY_IS_TRIGGER_SCREEN,true);
mCity = jsonObject.optString(KEY_CITY,"jinhua");
- mDescription = jsonObject.optString(KEY_DESCRPTION, ClockApplication.getContext().getResources().getString(R.string.always_zuo_never_die));
+ mDescription = jsonObject.optString(KEY_DESCRPTION, "");
startHourPowerTime = new DateModel();
startHourPowerTime.setDataString(jsonObject.getString(KEY_START_POWER));
stopHourPowerTime = new DateModel();
@@ -232,6 +241,8 @@ public class SharePerferenceModel implements Serializable {
timeHourAlterTypeName=jsonObject.optString(KEY_TIME_HOUR_ALTER_TYPE_NAME,"default");
timeHourAlterDialy=jsonObject.optInt(KEY_TIME_HOUR_ALTER_DIALY,20);
+ timeHourVideoPath=jsonObject.optString(KEY_TIME_HOUR_VIDEO_PATH,"");
+
handUpAble=jsonObject.optBoolean(KEY_IS_HANDUP_ABLE,false);
handUpTime=jsonObject.optInt(KEY_HANDUP_TIME,-1);
handUpMusic=jsonObject.optString(KEY_HANDUP_MUSIC,"");
@@ -267,6 +278,7 @@ public class SharePerferenceModel implements Serializable {
protected String toJsonString() {
JSONObject jsonObject = new JSONObject();
try {
+ jsonObject.put(KEY_FIRST_START,firstStart);
jsonObject.put(KEY_TYPE_HOUR_POWER, typeHourPower);
jsonObject.put(KEY_IS_TICK_SOUND, tickSound);
@@ -295,6 +307,7 @@ public class SharePerferenceModel implements Serializable {
jsonObject.put(KEY_TIME_HOUR_ALTER_TYPE_NAME,timeHourAlterTypeName);
jsonObject.put(KEY_TIME_HOUR_ALTER_DIALY,timeHourAlterDialy);
+ jsonObject.put(KEY_TIME_HOUR_VIDEO_PATH,timeHourVideoPath);
digitPerferenceModel.toJsonString(jsonObject);
@@ -518,6 +531,7 @@ public class SharePerferenceModel implements Serializable {
public void setTimeHourAlterTypeName(String timeHourAlterTypeName) {
this.timeHourAlterTypeName = timeHourAlterTypeName;
+ dirtySave();
}
public Integer getTimeHourAlterDialy() {
@@ -529,6 +543,14 @@ public class SharePerferenceModel implements Serializable {
dirtySave();
}
+ public String getTimeHourVideoPath() {
+ return timeHourVideoPath;
+ }
+
+ public void setTimeHourVideoPath(String timeHourVideoPath) {
+ this.timeHourVideoPath = timeHourVideoPath;
+ }
+
//digit
public Integer[] getTimeColorsArray() {
@@ -786,4 +808,21 @@ public class SharePerferenceModel implements Serializable {
digitPerferenceModel.setCharBackgroundBorderWithDoubble(charBackgroundBorderWithDoubble);
dirtySave();
}
+
+ public Integer getFontStyleSize() {
+ return digitPerferenceModel.getFontStyleSize();
+ }
+
+ public void setFontStyleSize(Integer fontStyleSize) {
+ digitPerferenceModel.setFontStyleSize(fontStyleSize);
+ dirtySave();
+ }
+
+ public boolean isFirstStart() {
+ return firstStart;
+ }
+
+ public void setFirstStart(boolean firstStart) {
+ this.firstStart = firstStart;
+ }
}
diff --git a/app/src/main/java/clock/socoolby/com/clock/pop/CalendarPopup.java b/app/src/main/java/clock/socoolby/com/clock/pop/CalendarPopup.java
index 9de8063..af268ec 100644
--- a/app/src/main/java/clock/socoolby/com/clock/pop/CalendarPopup.java
+++ b/app/src/main/java/clock/socoolby/com/clock/pop/CalendarPopup.java
@@ -137,6 +137,10 @@ public class CalendarPopup extends DialogFragment implements CalendarView.OnCale
}
protected void initData() {
+
+ }
+
+ protected void initTestData() {
int year = mCalendarView.getCurYear();
int month = mCalendarView.getCurMonth();
diff --git a/app/src/main/java/clock/socoolby/com/clock/pop/TimeSetupMinPopup.java b/app/src/main/java/clock/socoolby/com/clock/pop/TimeSetupMinPopup.java
index 8623093..0e162b2 100644
--- a/app/src/main/java/clock/socoolby/com/clock/pop/TimeSetupMinPopup.java
+++ b/app/src/main/java/clock/socoolby/com/clock/pop/TimeSetupMinPopup.java
@@ -60,20 +60,16 @@ public class TimeSetupMinPopup extends BasePopupWindow {
mHourSeekbar.setCurProcess(hour);
mMinuteSeekbar.setCurProcess(minute);
- mMinuteSeekbar.setMaxProcess(60);
- mHourSeekbar.setMaxProcess(120);
-
return content;
}
public void init(int hour, int minute) {
+ this.hour=hour;
+ this.minute=minute;
if(mHourSeekbar!=null) {
mHourSeekbar.setCurProcess(hour);
mMinuteSeekbar.setCurProcess(minute);
- }else{
- this.hour=hour;
- this.minute=minute;
}
}
diff --git a/app/src/main/java/clock/socoolby/com/clock/pop/TimeSetupPopup.java b/app/src/main/java/clock/socoolby/com/clock/pop/TimeSetupPopup.java
index 75f269e..5d311ae 100644
--- a/app/src/main/java/clock/socoolby/com/clock/pop/TimeSetupPopup.java
+++ b/app/src/main/java/clock/socoolby/com/clock/pop/TimeSetupPopup.java
@@ -1,5 +1,6 @@
package clock.socoolby.com.clock.pop;
+import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.net.Uri;
import android.os.Bundle;
@@ -28,6 +29,9 @@ import xyz.aprildown.ultimatemusicpicker.MusicPickerListener;
import xyz.aprildown.ultimatemusicpicker.UltimateMusicPicker;
public class TimeSetupPopup extends DialogFragment implements MusicPickerListener {
+
+ public static final String TAG=TimeSetupPopup.class.getName();
+
private CircleSeekBar mHourSeekbar;
private CircleSeekBar mMinuteSeekbar;
@@ -42,8 +46,6 @@ public class TimeSetupPopup extends DialogFragment implements MusicPickerListene
String s;
- MainActivity activity;
-
Button musicSelect;
ImageView back;
@@ -59,10 +61,6 @@ public class TimeSetupPopup extends DialogFragment implements MusicPickerListene
ImageView ok;
- public TimeSetupPopup(MainActivity activity) {
- this.activity=activity;
- }
-
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
@@ -71,6 +69,8 @@ public class TimeSetupPopup extends DialogFragment implements MusicPickerListene
mMinuteSeekbar = (CircleSeekBar) content.findViewById(R.id.seek_minute);
mTextView = (TextView)content.findViewById(R.id.seek_time);
+ mTextView.setTextColor(Color.YELLOW);
+
musicSelect=content.findViewById(R.id.tv_handup_time_select_Music);
back=content.findViewById(R.id.tv_handup_time_back);
@@ -103,37 +103,25 @@ public class TimeSetupPopup extends DialogFragment implements MusicPickerListene
mHourSeekbar.setOnSeekBarChangeListener(new CircleSeekBar.OnSeekBarChangeListener() {
@Override
public void onChanged(CircleSeekBar seekbar, int curValue) {
- changeText(curValue, mMinuteSeekbar.getCurProcess());
+ hour=curValue;
+ changeText(hour,minute);
}
});
- mHourSeekbar.fillInside();
mMinuteSeekbar.setOnSeekBarChangeListener(new CircleSeekBar.OnSeekBarChangeListener() {
@Override
public void onChanged(CircleSeekBar seekbar, int curValue) {
- changeText(mHourSeekbar.getCurProcess(), curValue);
+ minute=curValue;
+ changeText(hour,minute);
}
});
- mHourSeekbar.setCurProcess(hour);
- mMinuteSeekbar.setCurProcess(minute);
- mMinuteSeekbar.setMaxProcess(60);
- mHourSeekbar.setMaxProcess(120);
-
handUpAlterTypeGroup=content.findViewById(R.id.tv_huad_up_style_group);
handUpAlterTypeDefault=content.findViewById(R.id.tv_huad_up_style_default);
handUpAlterTypeSelect=content.findViewById(R.id.tv_huad_up_style_select);
- switch (handUpAlterType){
- case HandUpSelect123Fragment.NAME:
- handUpAlterTypeSelect.setChecked(true);
- break;
- case HandUpDefaultFragment.NAME:
- handUpAlterTypeDefault.setChecked(true);
- }
-
handUpAlterTypeGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
@@ -147,11 +135,27 @@ public class TimeSetupPopup extends DialogFragment implements MusicPickerListene
}
});
- musicSelect.setText(s);
-
return content;
}
+ @Override
+ public void onResume() {
+ super.onResume();
+ Log.d(TAG,"onResume hour:"+hour+"\tminute:"+minute);
+ mHourSeekbar.fillInside();
+ mHourSeekbar.setCurProcess(hour);
+ mMinuteSeekbar.setCurProcess(minute);
+ //changeText(hour,minute);
+ musicSelect.setText(s);
+ switch (handUpAlterType){
+ case HandUpSelect123Fragment.NAME:
+ handUpAlterTypeSelect.setChecked(true);
+ break;
+ case HandUpDefaultFragment.NAME:
+ handUpAlterTypeDefault.setChecked(true);
+ }
+ }
+
@Override
public void onActivityCreated(Bundle savedInstanceState) {
getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE);
@@ -163,22 +167,14 @@ public class TimeSetupPopup extends DialogFragment implements MusicPickerListene
public void init(int hour, int minute,String handUpAlterType,Uri musicUri,String musicName) {
- if(mHourSeekbar!=null) {
- mHourSeekbar.setCurProcess(hour);
- mMinuteSeekbar.setCurProcess(minute);
- }else{
- this.hour=hour;
- this.minute=minute;
- }
+ this.hour=hour;
+ this.minute=minute;
this.s=musicName;
this.uri=musicUri;
this.handUpAlterType=handUpAlterType;
-
}
private void changeText(int hour, int minute) {
- this.hour=hour;
- this.minute=minute;
int day=hour/60;
int inHour=hour;
String hourStr="";
diff --git a/app/src/main/java/clock/socoolby/com/clock/state/ClockStateMachine.java b/app/src/main/java/clock/socoolby/com/clock/state/ClockStateMachine.java
index a217042..cb58c0f 100644
--- a/app/src/main/java/clock/socoolby/com/clock/state/ClockStateMachine.java
+++ b/app/src/main/java/clock/socoolby/com/clock/state/ClockStateMachine.java
@@ -24,6 +24,7 @@ import clock.socoolby.com.clock.viewmodel.GlobalViewModel;
import clock.socoolby.com.clock.viewmodel.SimulateViewModel;
import clock.socoolby.com.clock.viewmodel.ThemeUIViewModel;
+import static clock.socoolby.com.clock.state.ClockModeEnum.HANDUP;
import static clock.socoolby.com.clock.state.ClockTimeTypeEnum.TIME;
public class ClockStateMachine implements Handler.Callback{
@@ -92,8 +93,8 @@ public class ClockStateMachine implements Handler.Callback{
public boolean handleMessage(Message msg) {
switch (msg.what) {
case UPDATE_TIME:
- updateTime();
checkHandUp();
+ updateTime();
break;
}
return true;
@@ -115,6 +116,7 @@ public class ClockStateMachine implements Handler.Callback{
case COUNTING:
countingDateTimeBase =new Date();
}
+ updateDescription(model.getDescription());
}
public ClockTimeTypeEnum getCurrentShowTimeType(){
@@ -126,29 +128,30 @@ public class ClockStateMachine implements Handler.Callback{
return globalViewModel.getClockModeEnum().getValue();
}
+ String timeString;
+ DateModel date;
private void updateTime() {
heartbeat=!heartbeat;
- DateModel date = new DateModel();
+ date= new DateModel();
globalViewModel.setHeartbeat(heartbeat);
- String timeString=null;
switch (getCurrentModeEnum()){
case NORMAL:
switch (showTimeType){
case COUNTING:
DateModel temp=new DateModel(countingDateTimeBase);
- timeString=temp.getTimeString(false);
+ digitViewModel.setTimeText(temp.getTimeString(false));
if (!model.isTickSound()) {
Player.getInstance().playTick(ClockApplication.getContext(), R.raw.tick2);
}
break;
case COUNTING_DOWN:
- timeString=DateModel.getTimeFull(globalViewModel.getHandUpTime().getValue());
+ digitViewModel.setTimeText(DateModel.getTimeFull(globalViewModel.getHandUpTime().getValue()));
break;
default:
timeString = model.isDisplaySecond() ? date.getTimeString(model.isHourSystem12()) : date.getShortTimeString(heartbeat,model.isHourSystem12());
+ digitViewModel.setTimeText(timeString);
break;
}
- digitViewModel.getTimeText().setValue(timeString);
break;
case HANDUP:
break;
@@ -156,11 +159,10 @@ public class ClockStateMachine implements Handler.Callback{
if(countingDateTimeBase==null)
countingDateTimeBase=new Date();
DateModel temp=new DateModel(countingDateTimeBase);
- timeString=temp.getTimeString(false);
+ digitViewModel.setTimeText(temp.getTimeString(false));
if (!model.isTickSound()) {
Player.getInstance().playTick(ClockApplication.getContext(), R.raw.tick2);
}
- digitViewModel.getTimeText().setValue(timeString);
break;
}
updateDay(date);
@@ -212,7 +214,7 @@ public class ClockStateMachine implements Handler.Callback{
private void reportTime(DateModel date) {
- if (globalViewModel.isTickSound()&&globalViewModel.getClockModeEnum().getValue()!=ClockModeEnum.HANDUP) {
+ if (globalViewModel.isTickSound()&&globalViewModel.getClockModeEnum().getValue()!= HANDUP) {
Player.getInstance().playTick(ClockApplication.getContext(),R.raw.tick2);
}
int year = date.getYear();
@@ -282,11 +284,11 @@ public class ClockStateMachine implements Handler.Callback{
case NORMAL:
globalViewModel.getHandUpTime().setValue(handUpTime-1);
if (handUpTime <= 10&&handUpTime > 0)
- themeUIViewModel.setDescription("提醒时间倒计时: " + handUpTime);
+ updateDescription("提醒时间倒计时: " + handUpTime);
if (handUpTime == 0) {
globalViewModel.getHandUpTime().setValue(model.getHandUpTime());
- globalViewModel.getClockModeEnum().setValue(ClockModeEnum.HANDUP);
- themeUIViewModel.setDescription(model.getDescription());
+ globalViewModel.getClockModeEnum().setValue(HANDUP);
+ updateDescription(model.getDescription());
}
break;
case HANDUP:
@@ -298,4 +300,8 @@ public class ClockStateMachine implements Handler.Callback{
break;
}
}
+
+ private void updateDescription(String desc){
+ themeUIViewModel.setDescription(desc);
+ }
}
diff --git a/app/src/main/java/clock/socoolby/com/clock/utils/Player.java b/app/src/main/java/clock/socoolby/com/clock/utils/Player.java
index 3ec1c9b..eb5ae6f 100755
--- a/app/src/main/java/clock/socoolby/com/clock/utils/Player.java
+++ b/app/src/main/java/clock/socoolby/com/clock/utils/Player.java
@@ -26,6 +26,8 @@ public class Player {
private boolean isReporttime = false;
+ private boolean playAble=true;
+
public static Player getInstance() {
if (playerInstance == null) {
synchronized (Player.class) {
@@ -95,13 +97,16 @@ public class Player {
});
mediaPlayer.start();
} catch (IOException ioe) {
+ if(mediaPlayer!=null)
+ mediaPlayer.release();
mediaPlayer = null;
+ ioe.printStackTrace();
}
-
}
public void reportTime(Context activity, int year, int month, int day, int hour, int minute, int today) {
- if (isReporttime)
+ Log.d(TAG,"go in report time playAble:"+playAble+"\tisReportime:"+isReporttime);
+ if (!playAble||isReporttime)
return;
Log.d(TAG, String.format("reportTime Year:%d Month:%d Day:%d Hour:%d Minute:%d Today:%d", year, month, day, hour, minute, today));
LinkedList playList = new LinkedList();
@@ -164,27 +169,28 @@ public class Player {
}
public void playTick(Context activity,int tick_type_id) {
+ Log.d(TAG,"go in Play tick playable:"+playAble+"\tisReportime:"+isReporttime);
+ if (!playAble||isReporttime)
+ return;
if (!ScreenManager.isScreenOn() || ScreenManager.isApplicationBroughtToBackground(ClockApplication.getContext()))
return;
- if (!isReporttime) {
- playSoundWithRawId(activity,tick_type_id);
- }
+ playSoundWithRawId(activity,tick_type_id);
}
private AssetFileDescriptor soundFile = null;
private Map soundFileCache=new HashMap<>();
public void playHandUp(Context activity){
+ Log.d(TAG,"go in Play hand up playable:"+playAble+"\tisReportime:"+isReporttime);
+ if (!playAble||isReporttime)
+ return;
if (!ScreenManager.isScreenOn() || ScreenManager.isApplicationBroughtToBackground(ClockApplication.getContext()))
return;
- if (!isReporttime) {
- playSoundWithRawId(activity, R.raw.handup_didi);
- }
+ playSoundWithRawId(activity, R.raw.handup_didi);
}
public void playSoundWithRawId(Context activity,int soundId){
-
if (mediaPlayer == null)
mediaPlayer = buildMediaPlayer();
soundFile =soundFileCache.get(soundId);
@@ -206,19 +212,24 @@ public class Player {
});
mediaPlayer.start();
} catch (IOException ioe) {
+ if(mediaPlayer!=null)
+ mediaPlayer.release();
mediaPlayer = null;
+ ioe.printStackTrace();
}
}
private static MediaPlayer buildMediaPlayer() {
MediaPlayer mediaPlayer = MediaPlayer.create(ClockApplication.getContext(), R.raw.tick);
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
+
return mediaPlayer;
}
boolean isPlaying=false;
public void playRing(Context activity, Uri uri){
-
+ if(!playAble)
+ return;
if (mediaPlayer == null) {
mediaPlayer = buildMediaPlayer();
isPlaying=false;
@@ -243,8 +254,11 @@ public class Player {
isPlaying=true;
mediaPlayer.start();
} catch (IOException ioe) {
+ if(mediaPlayer!=null)
+ mediaPlayer.release();
mediaPlayer = null;
isPlaying=false;
+ ioe.printStackTrace();
}
}
@@ -255,4 +269,18 @@ public class Player {
mediaPlayer.stop();
}
}
+
+ public boolean isPlayAble() {
+ return playAble;
+ }
+
+ public void setPlayAble(boolean playAble) {
+ Log.d(TAG,"set Play able:"+playAble);
+ this.playAble = playAble;
+ if(!playAble&&mediaPlayer!=null){
+ resert();
+ mediaPlayer.release();
+ mediaPlayer=null;
+ }
+ }
}
diff --git a/app/src/main/java/clock/socoolby/com/clock/viewmodel/DigitViewModel.java b/app/src/main/java/clock/socoolby/com/clock/viewmodel/DigitViewModel.java
index a900f91..4793478 100644
--- a/app/src/main/java/clock/socoolby/com/clock/viewmodel/DigitViewModel.java
+++ b/app/src/main/java/clock/socoolby/com/clock/viewmodel/DigitViewModel.java
@@ -64,7 +64,7 @@ public class DigitViewModel extends ViewModel {
shadowType.setValue(ShadowTypeEnum.valueOf(model.getShadowType()));
timeCharAnimatorType.setValue(CharAnimatorEnum.valueOf(model.getTimeTextCharAnimatorType()));
baseLineDown.setValue(model.getBaseLineDown());
- timeFontStyleSize.setValue(100);
+ timeFontStyleSize.setValue(model.getFontStyleSize());
timeFontName.setValue(model.getFontName());
secondSubscript.setValue(model.isTimeTextSecondSubscript());
charBackgroundBorder.setValue(model.isCharBackgroundBorder());
@@ -148,6 +148,7 @@ public class DigitViewModel extends ViewModel {
public void setTimeFontStyleSize(Integer timeFontStyleSize) {
this.timeFontStyleSize.setValue(timeFontStyleSize);
+ //model.setFontStyleSize(timeFontStyleSize);
}
public void setShadowType(ShadowTypeEnum shadowType) {
diff --git a/app/src/main/java/clock/socoolby/com/clock/viewmodel/GlobalViewModel.java b/app/src/main/java/clock/socoolby/com/clock/viewmodel/GlobalViewModel.java
index ad3c72e..68836d8 100644
--- a/app/src/main/java/clock/socoolby/com/clock/viewmodel/GlobalViewModel.java
+++ b/app/src/main/java/clock/socoolby/com/clock/viewmodel/GlobalViewModel.java
@@ -17,13 +17,13 @@ public class GlobalViewModel extends ViewModel {
private MutableLiveData foregroundColor=new MutableLiveData<>();
- private MutableLiveData backgroundImageUri=new MutableLiveData<>();
+ private MutableLiveData backgroundImageUri=new MutableLiveData<>();
- private MutableLiveData backgroundAnimatorName=new MutableLiveData<>();
+ private MutableLiveData backgroundAnimatorName=new MutableLiveData<>();
private MutableLiveData backgroundAnimatorColor=new MutableLiveData<>();
- private Boolean backgroundAnimatorRandomColor=false;
+ private Boolean backgroundAnimatorRandomColor=false;
private MutableLiveData clockInterfaceTypeEnum =new MutableLiveData<>();
@@ -31,14 +31,14 @@ public class GlobalViewModel extends ViewModel {
private MutableLiveData backgroundImageVisable=new MutableLiveData<>();
- private MutableLiveData autoFullScreen=new MutableLiveData<>();
+ private MutableLiveData autoFullScreen=new MutableLiveData<>();
//system
private Boolean tickSound=false;
private Boolean appConfig=false;
- private MutableLiveData mCity=new MutableLiveData<>();
+ private MutableLiveData mCity=new MutableLiveData<>();
private MutableLiveData brightness=new MutableLiveData<>();
@@ -51,12 +51,13 @@ public class GlobalViewModel extends ViewModel {
private MutableLiveData handUpTypeName=new MutableLiveData<>();
- private MutableLiveData hourAlterTypeName=new MutableLiveData<>();
+ private MutableLiveData hourAlterTypeName=new MutableLiveData<>();
private MutableLiveData timeHourAnimatorStarting =new MutableLiveData<>();
private MutableLiveData timeHourAnimatordialy=new MutableLiveData<>();
+
//state
private MutableLiveData clockModeEnum=new MutableLiveData<>();
@@ -64,20 +65,26 @@ public class GlobalViewModel extends ViewModel {
private MutableLiveData time_hour=new MutableLiveData<>();
- private MutableLiveData time_day=new MutableLiveData<>();
+ private MutableLiveData time_day=new MutableLiveData<>();
SharePerferenceModel model;
public GlobalViewModel(SharePerferenceModel model) {
this.model = model;
+ init();
loadFromModel();
}
- public void loadFromModel(){
+ private void init(){
srceenLock.setValue(false);
brightness.setValue(100);
heartbeat.setValue(true);
+ appConfig=false;
+ clockModeEnum.setValue(ClockModeEnum.NORMAL);
+ timeHourAnimatorStarting.setValue(false);
+ }
+ public void loadFromModel(){
mCity.setValue(model.getCity());
backgroundColor.setValue(model.getBackgroundColor());
foregroundColor.setValue(model.getForegroundColor());
@@ -88,28 +95,16 @@ public class GlobalViewModel extends ViewModel {
backgroundAnimatorName.setValue(model.getBackgroundAnimatorName());
backgroundAnimatorColor.setValue(model.getForegroundColor1());
backgroundAnimatorRandomColor=model.isBackgroundAnimatorRandomColor();
-
clockInterfaceTypeEnum.setValue(ClockInterfaceTypeEnum.valueOf(model.getClockInterfaceType()));
-
autoFullScreen.setValue(model.isAutoFullscreen());
- clockModeEnum.setValue(ClockModeEnum.NORMAL);
-
handUpAble.setValue(model.isHandUpAble());
handUpTime.setValue(model.getHandUpTime());
handUpTypeName.setValue(model.getHandUpTypeName());
-
hourSystem12.setValue(model.isHourSystem12());
-
hourAlterTypeName.setValue(model.getTimeHourAlterTypeName());
-
time_hour.setValue(new Date().getHours());
-
- timeHourAnimatorStarting.setValue(false);
-
timeHourAnimatordialy.setValue(model.getTimeHourAlterDialy());
-
- appConfig=false;
}
public MutableLiveData getCity() {
@@ -189,6 +184,11 @@ public class GlobalViewModel extends ViewModel {
return handUpAble;
}
+ public void setHandUpTime(Integer handUpTime) {
+ this.handUpTime.setValue(handUpTime);
+ //model.setHandUpTime(handUpTime);
+ }
+
public void setCity(String mCity) {
this.mCity.setValue(mCity);
@@ -207,6 +207,7 @@ public class GlobalViewModel extends ViewModel {
public void setBackgroundImageUri(Uri backgroundImageUri) {
this.backgroundImageUri.setValue(backgroundImageUri);
+ model.setBackgroundImage(backgroundImageUri.toString());
}
public void setBackgroundAnimatorName(String backgroundAnimatorName) {
@@ -271,10 +272,6 @@ public class GlobalViewModel extends ViewModel {
model.setAutoFullscreen(autoFullScreen);
}
- public void setHandUpTime(Integer handUpTime) {
- this.handUpTime.setValue(handUpTime);
- //model.setHandUpTime(handUpTime);
- }
public void setHandUpAble(Boolean handUpAble) {
this.handUpAble.setValue(handUpAble);
@@ -331,4 +328,8 @@ public class GlobalViewModel extends ViewModel {
public void setAppConfig(Boolean appConfig) {
this.appConfig = appConfig;
}
+
+ public String getTimeHourVideoPath(){
+ return model.getTimeHourVideoPath();
+ }
}
diff --git a/app/src/main/java/clock/socoolby/com/clock/viewmodel/ThemeUIViewModel.java b/app/src/main/java/clock/socoolby/com/clock/viewmodel/ThemeUIViewModel.java
index 9971632..2c906d4 100644
--- a/app/src/main/java/clock/socoolby/com/clock/viewmodel/ThemeUIViewModel.java
+++ b/app/src/main/java/clock/socoolby/com/clock/viewmodel/ThemeUIViewModel.java
@@ -29,7 +29,7 @@ public class ThemeUIViewModel extends ViewModel {
loadFromModel();
}
- private void loadFromModel(){
+ public void loadFromModel(){
description.setValue(model.getDescription());
themeName.setValue(model.getThemeName());
@@ -42,6 +42,10 @@ public class ThemeUIViewModel extends ViewModel {
return description;
}
+ public void setDescription(String description) {
+ this.description.setValue(description);
+ }
+
public MutableLiveData getClockUITypeEnum() {
return clockUITypeEnum;
}
@@ -67,10 +71,6 @@ public class ThemeUIViewModel extends ViewModel {
}
- public void setDescription(String description) {
- this.description.setValue(description);
- }
-
public void setClockUITypeEnum(ClockThemeUITypeEnum clockUITypeEnum) {
this.clockUITypeEnum.setValue(clockUITypeEnum);
model.setThemeUIType(clockUITypeEnum.code);
diff --git a/app/src/main/java/clock/socoolby/com/clock/widget/animatorview/AnimatorView.java b/app/src/main/java/clock/socoolby/com/clock/widget/animatorview/AnimatorView.java
index 34439ec..37c1ba4 100644
--- a/app/src/main/java/clock/socoolby/com/clock/widget/animatorview/AnimatorView.java
+++ b/app/src/main/java/clock/socoolby/com/clock/widget/animatorview/AnimatorView.java
@@ -78,6 +78,8 @@ public class AnimatorView extends View {
if(animator!=null) {
animator.setColor(color);
animator.start();
+ }else{
+ invalidate();
}
}
diff --git a/app/src/main/java/clock/socoolby/com/clock/widget/textview/DigitTextView.java b/app/src/main/java/clock/socoolby/com/clock/widget/textview/DigitTextView.java
index 7f60260..4148699 100644
--- a/app/src/main/java/clock/socoolby/com/clock/widget/textview/DigitTextView.java
+++ b/app/src/main/java/clock/socoolby/com/clock/widget/textview/DigitTextView.java
@@ -29,7 +29,7 @@ import clock.socoolby.com.clock.widget.textview.charanimator.Up2DownCharAnimator
public class DigitTextView extends androidx.appcompat.widget.AppCompatTextView {
public static final String Tag = DigitTextView.class.getSimpleName();
- float baseLineDown = 0;
+ float baseLineDownScale = 0;
private LinearGradient mLinearGradient;
@@ -116,7 +116,7 @@ public class DigitTextView extends androidx.appcompat.widget.AppCompatTextView {
}
public void setBaseLineDown(float baseLineDown) {
- this.baseLineDown =getHeight()/2*(-baseLineDown/100);
+ this.baseLineDownScale =baseLineDown;
layoutReflushAble=true;
}
@@ -254,6 +254,8 @@ public class DigitTextView extends androidx.appcompat.widget.AppCompatTextView {
textSubscriptSpan = textSubscriptSpan + subscriptCharWidth * 2;
}
+
+
layoutReflushAble=false;
}
@@ -282,7 +284,7 @@ public class DigitTextView extends androidx.appcompat.widget.AppCompatTextView {
layoutReflush(textToDraw);
startX = (getWidth() - textWidth - textSubscriptSpan) / 2;
- startY = (getHeight() + textBodyHight) / 2+baseLineDown;
+ startY = (getHeight() + textBodyHight) / 2+getHeight()/2*(-baseLineDownScale /100);
for (int i = 0; i < textLength; i++) {
charStr = String.valueOf(textToDraw.charAt(i));
diff --git a/app/src/main/res/layout/fragment_hour_video.xml b/app/src/main/res/layout/fragment_hour_video.xml
new file mode 100644
index 0000000..071a51c
--- /dev/null
+++ b/app/src/main/res/layout/fragment_hour_video.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_setting.xml b/app/src/main/res/layout/fragment_setting.xml
index 143da43..7edee73 100755
--- a/app/src/main/res/layout/fragment_setting.xml
+++ b/app/src/main/res/layout/fragment_setting.xml
@@ -48,13 +48,61 @@
android:text="@string/no_report" />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -78,6 +126,7 @@
+
+
+
+
+
-
+ android:textSize="22sp" />
+