diff --git a/.idea/gradle.xml b/.idea/gradle.xml
index 166a03b..97e0e84 100644
--- a/.idea/gradle.xml
+++ b/.idea/gradle.xml
@@ -5,14 +5,14 @@
-
-
+
+
diff --git a/.idea/runConfigurations.xml b/.idea/runConfigurations.xml
deleted file mode 100644
index 7f68460..0000000
--- a/.idea/runConfigurations.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.travis.yml b/.travis.yml
new file mode 100644
index 0000000..c810c3d
--- /dev/null
+++ b/.travis.yml
@@ -0,0 +1,22 @@
+language: android
+jdk: openjdk7
+android:
+ components:
+ - build-tools-23.0.2
+ - android-23
+ - extra-android-support
+ - extra-google-m2repository
+ - extra-android-m2repository
+ - sys-img-armeabi-v7a-android-21
+script:
+- "./gradlew assembleRelease"
+before_deploy:
+ - mv app/build/outputs/apk/app-release.apk app/build/outputs/apk/Zjsnviewer.apk
+deploy:
+ provider: releases
+ api_key:
+ secure: Jmz8pk7OTjM7VMHTYdQxWQz+Tng0NFgIgpW2dPqNRlmwro4cFaKwelt0uckGNJCdTf7oZngtCoP1IFiD6ZqisSRqxp1spd1Xtqv0pxeTKXoY5EQthHl5iM3QLnQtE/Uwbcg387TFhC/lZt34khmFI5Pe9GNPGuf4yYa/MspNcR8AUnoo60p/LHgcQgr9tLViFgE4+1grSFPFnW3JksadFYkGlAxL4Yf6pbEKDKtoGJm34E2MkQFeKiw3g2RJRBjguWzPub8O3gz7q1P/9v6ysBxiwUMWdOsFUoQ7ysVm+CRgwKagIAmdYaU/31lkw+XLU43rAFi3u8hbCbyqC3mzGNdRL8sXKdVMmHJJcSOhynfwKAH8SFX9WHmAbw4xbs68+dI7zdt8vVF4/GZj2uXSD6jrzMOna6IF8jSgYLa7HhNVEqHS1rZA3J3mxob9MWTsoxhDXXhwnmcRhRRuwHIFGvzAH4zyAUt2tbYsI+l8paml5s4KEU3zVRNSNyUWRyzNa8ZEBnlNP+tbdIMzHi2Z9f7zGwFzy4aJrSjFZeFlffYNkdbGZARQqGYpz7x4gL2uVkYbtTkb9p047Q0n//1ApEayERAJ06CNHDMmC9bzpcST1qxfRg+q3PNs5jk9ORw9RmlmuYfAvWHTFocxmzc2wiwvnrXfPvLlJxajwM6jnjU=
+ file: app/build/outputs/apk/Zjsnviewer.apk
+ skip_cleanup: true
+ on:
+ tags: true
diff --git a/README.md b/README.md
index 0376266..6543b9f 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,6 @@
+Travis CI: [](https://travis-ci.org/JohnnySun/ZjsnViewer)
+原作者貌似不再支持,fork来此工程进行继续开发。
+---
# ZjsnViewer
by Tidu no JB
diff --git a/ZjsnViewer.iml b/ZjsnViewer.iml
index 40d8945..4a1830a 100644
--- a/ZjsnViewer.iml
+++ b/ZjsnViewer.iml
@@ -13,7 +13,7 @@
-
+
\ No newline at end of file
diff --git a/app/app.iml b/app/app.iml
index 8125b53..23a2881 100644
--- a/app/app.iml
+++ b/app/app.iml
@@ -12,10 +12,7 @@
-
-
- generateDebugAndroidTestSources
generateDebugSources
@@ -28,9 +25,10 @@
-
+
+
@@ -50,6 +48,15 @@
+
+
+
+
+
+
+
+
+
@@ -57,6 +64,7 @@
+
@@ -64,34 +72,57 @@
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
+
+
-
-
-
-
+
+
+
+
+
+
-
-
-
+
+
+
+
-
-
-
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 0026589..926d31c 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -2,25 +2,54 @@ apply plugin: 'com.android.application'
android {
compileSdkVersion 23
- buildToolsVersion "21.1.2"
+ buildToolsVersion '23.0.3'
defaultConfig {
applicationId "me.crafter.android.zjsnviewer"
minSdkVersion 16
targetSdkVersion 23
- versionCode 26
- versionName "2.6 - G"
+ versionCode 31
+ versionName "2.8.1"
+ }
+ lintOptions {
+ abortOnError false
+ }
+ signingConfigs {
+ release {
+ storeFile file("../johnny.moe.jks")
+ storePassword System.getenv("KEYSTORE_PASS")
+ keyAlias System.getenv("ALIAS_NAME")
+ keyPassword System.getenv("ALIAS_PASS")
+ }
}
buildTypes {
release {
+ signingConfig signingConfigs.release
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
+
}
+buildscript {
+ repositories {
+ mavenCentral()
+ }
+ dependencies {
+ classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
+ }
+}
+
+apply plugin: 'com.neenbedankt.android-apt'
+
dependencies {
- compile fileTree(dir: 'libs', include: ['*.jar'])
- compile 'com.android.support:appcompat-v7:23.1.1'
- compile 'com.android.support:support-v4:23.1.1'
+ compile fileTree(include: ['*.jar'], dir: 'libs')
+ compile 'com.android.support:appcompat-v7:23.4.0'
+ compile 'com.android.support:support-v4:23.4.0'
+ compile 'com.jaredrummler:android-processes:1.0.8'
+ compile 'com.android.support.constraint:constraint-layout:1.0.0-alpha1'
+
+ compile 'com.jakewharton:butterknife:8.0.1'
+ apt 'com.jakewharton:butterknife-compiler:8.0.1'
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 00da9d0..c8f9c47 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -1,19 +1,20 @@
+ package="me.crafter.android.zjsnviewer">
+ android:theme="@style/AppTheme">
+ android:label="@string/repair_widget_name">
@@ -24,7 +25,7 @@
+ android:label="@string/build_widget_name">
@@ -35,7 +36,7 @@
+ android:label="@string/make_widget_name">
@@ -46,7 +47,7 @@
+ android:label="@string/travel_widget_name">
@@ -57,7 +58,7 @@
+ android:label="@string/app_name">
@@ -67,18 +68,20 @@
android:resource="@xml/widget__main_info" />
-
+
+
+ android:exported="true">
+
+ android:label="@string/title_activity_settings">
@@ -88,17 +91,13 @@
-
-
-
-
+ android:parentActivityName=".ZjsnViewer">
@@ -109,7 +108,7 @@
+ android:parentActivityName=".ZjsnViewer">
@@ -120,7 +119,7 @@
+ android:parentActivityName=".ZjsnViewer">
@@ -131,24 +130,33 @@
+ android:parentActivityName=".ZjsnViewer">
>
-
+ android:parentActivityName=".ZjsnViewer">
>
+
+
+
+
+
+
+
+
+
+
-
+
\ No newline at end of file
diff --git a/app/src/main/app_notification-web.png b/app/src/main/app_notification-web.png
new file mode 100644
index 0000000..4dd9058
Binary files /dev/null and b/app/src/main/app_notification-web.png differ
diff --git a/app/src/main/java/me/crafter/android/zjsnviewer/DockInfo.java b/app/src/main/java/me/crafter/android/zjsnviewer/DockInfo.java
index 496a7c1..1fbf0ae 100644
--- a/app/src/main/java/me/crafter/android/zjsnviewer/DockInfo.java
+++ b/app/src/main/java/me/crafter/android/zjsnviewer/DockInfo.java
@@ -1,15 +1,14 @@
package me.crafter.android.zjsnviewer;
-import android.app.ActivityManager;
import android.content.Context;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;
import android.util.Log;
-import java.util.List;
-
public class DockInfo {
+ static boolean zjsn_running_state = false;
+ static boolean zjsn_formal_state = false;
public static int lastUpdate = -1;
public static int[] dockTravelTime = {0, 0, 0, 0};
@@ -131,6 +130,7 @@ public static int[][] getStatusInt(){
public static boolean shouldNotify(Context context){
// First check no disturb
+ Log.d("DockInfo", "check notify");
if (Storage.isNoDisturbNow(context)) return false;
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
@@ -266,26 +266,37 @@ public static String[] getMakeBoard(){
public static boolean requestUpdate(Context context){
boolean ret = true;
Log.i("DockInfo", "Current Interval is " + updateInterval + " (" + (currentUnix() - lastUpdate) + ")");
- if (currentUnix() - lastUpdate > updateInterval){
- //lastUpdate is put before updateDockInfo
- //to prevent multi request caused by delay
- lastUpdate = currentUnix();
- NetworkManager.updateDockInfo(context);
- } else {
- ret = false;
- }
-
- ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
- List procInfos = activityManager.getRunningAppProcesses();
- for (int i = 0; i < procInfos.size(); i++){
- if (procInfos.get(i).processName.startsWith("com.muka.shipwar")){
- DockInfo.updateInterval = 15;
- Storage.str_tiduName = Storage.str_gameRunning[Storage.language];
+ zjsn_formal_state = zjsn_running_state;
+ switch (ZjsnState.getZjsnState()) {
+ case 0:
+ zjsn_running_state = true;
+ //Zjsn in running(both foreground and background)
break;
+ case 1:
+ zjsn_running_state = false;
+ //Zjsn in not running
+ break;
+ }
+ SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
+// 如果战舰少女没有运行或者自动运行被关闭则允许更新
+ if(!zjsn_running_state||!prefs.getBoolean("auto_run", true)) {
+ if (currentUnix() - lastUpdate > updateInterval || zjsn_formal_state != zjsn_running_state||!prefs.getBoolean("auto_run", true)) {
+ //lastUpdate is put before updateDockInfo
+ //to prevent multi request caused by delay
+ if (updateInterval == 0) updateInterval =15;
+ lastUpdate = currentUnix();
+ NetworkManager.updateDockInfo(context);
+ } else {
+ ret = false;
}
}
- SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
+
+ if (zjsn_running_state&&prefs.getBoolean("auto_run", true)){
+ DockInfo.updateInterval = 15;
+ Storage.str_tiduName = Storage.str_gameRunning[Storage.language];
+ }
+
Boolean on = prefs.getBoolean("on", false);
if (!on){
DockInfo.updateInterval = 15;
diff --git a/app/src/main/java/me/crafter/android/zjsnviewer/InfoActivity.java b/app/src/main/java/me/crafter/android/zjsnviewer/InfoActivity.java
new file mode 100644
index 0000000..aa1243b
--- /dev/null
+++ b/app/src/main/java/me/crafter/android/zjsnviewer/InfoActivity.java
@@ -0,0 +1,337 @@
+package me.crafter.android.zjsnviewer;
+
+import android.app.ProgressDialog;
+import android.content.Context;
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.os.Bundle;
+import android.os.Handler;
+import android.preference.PreferenceManager;
+import android.support.v4.app.Fragment;
+import android.support.v4.app.FragmentActivity;
+import android.support.v4.app.FragmentManager;
+import android.support.v4.app.FragmentPagerAdapter;
+import android.support.v4.view.ViewPager;
+import android.support.v4.widget.DrawerLayout;
+import android.support.v7.widget.Toolbar;
+import android.view.View;
+import android.widget.CompoundButton;
+import android.widget.ImageButton;
+import android.widget.Switch;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import java.util.ArrayList;
+
+import butterknife.BindView;
+import butterknife.ButterKnife;
+import me.crafter.android.zjsnviewer.infofragment.BuildFragment;
+import me.crafter.android.zjsnviewer.infofragment.MakeFragment;
+import me.crafter.android.zjsnviewer.infofragment.RepairFragment;
+import me.crafter.android.zjsnviewer.infofragment.TravelFragemt;
+
+public class InfoActivity extends FragmentActivity {
+
+ @BindView(R.id.dl_drawer)
+ DrawerLayout dl_drawer;
+
+ @BindView(R.id.toobar)
+ Toolbar bar;
+
+ @BindView(R.id.tv_name)
+ TextView tv_name;
+ @BindView(R.id.tv_level)
+ TextView tv_level;
+
+ @BindView(R.id.tv_travel)
+ TextView tv_travel;
+ @BindView(R.id.tv_repair)
+ TextView tv_repair;
+ @BindView(R.id.tv_build)
+ TextView tv_build;
+ @BindView(R.id.tv_make)
+ TextView tv_make;
+ @BindView(R.id.vp_page)
+ ViewPager vp_page;
+
+ @BindView(R.id.ib_icon)
+ ImageButton ib_icon;
+
+ @BindView(R.id.tv_drawer_name)
+ TextView tv_drawer_name;
+ @BindView(R.id.tv_drawer_level)
+ TextView tv_drawer_level;
+ @BindView(R.id.tv_build_time)
+ TextView tv_build_time;
+ @BindView(R.id.tv_setting)
+ TextView tv_setting;
+
+ @BindView(R.id.sw_title_on)
+ Switch sw_title_on;
+ @BindView(R.id.sw_title_auto_run)
+ Switch sw_title_auto_run;
+ @BindView(R.id.tv_web)
+ TextView tv_web;
+ private Context context;
+
+ private ArrayList tabs;
+ private TravelFragemt travelFragemt;
+ private BuildFragment buildFragment;
+ private MakeFragment makeFragment;
+ private RepairFragment repairFragment;
+
+ private Handler handler;
+ private Runnable runnable;
+ private int RUN_TIME = 60*1000;
+ private int FIRST_TIME = 2*1000;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_info);
+ ButterKnife.bind(this);
+
+ initData();
+ initView();
+ initEven();
+ }
+
+ @Override
+ protected void onResume() {
+ super.onResume();
+ SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
+ Boolean on = preferences.getBoolean("on", true);
+ Boolean auto = preferences.getBoolean("auto_run", true);
+ sw_title_on.setChecked(on);
+ sw_title_auto_run.setChecked(auto);
+
+ handler.postDelayed(runnable,FIRST_TIME);
+ }
+
+ @Override
+ protected void onPause() {
+ super.onPause();
+ handler.removeCallbacks(runnable);
+ }
+
+ public void initData(){
+
+ context = this;
+ SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
+ String username = prefs.getString("username", "none");
+ String password = prefs.getString("password", "none");
+ if (username.contains("none") && password.contains("none")) Toast.makeText(context, R.string.username_hint, Toast.LENGTH_SHORT).show();
+ }
+
+ private void initView(){
+
+ refreshView();
+ initFragment();
+ }
+
+ private void initEven(){
+
+ bar.setNavigationOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ finish();
+ }
+ });
+
+ ib_icon.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+
+ DockInfo.updateInterval = 0;
+ final ProgressDialog progressDialog = ProgressDialog.show(context,"",getString(R.string.loading));
+ UpdateTask task = new UpdateTask(context);
+ task.setUpdateTaskStateChange(new UpdateTask.onUpdateTaskStateChange() {
+
+ @Override
+ public void AfterTask() {
+
+ progressDialog.dismiss();
+ refreshAllView();
+ }
+ });
+ task.execute();
+// new UpdateTask(v.getContext()).execute();
+
+ }
+ });
+
+ vp_page.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
+ @Override
+ public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
+
+ }
+
+ @Override
+ public void onPageSelected(int position) {
+
+ setTab(position);
+ }
+
+ @Override
+ public void onPageScrollStateChanged(int state) {
+
+ }
+ });
+
+ for(final TextView textView : tabs){
+
+ View view = (View) textView.getParent();
+ view.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+
+ int position = (int) textView.getTag();
+ vp_page.setCurrentItem(position);
+ setTab(position);
+ }
+ });
+ }
+
+ handler = new Handler();
+ runnable = new Runnable() {
+ @Override
+ public void run() {
+
+ refreshAllView();
+ handler.postDelayed(runnable,RUN_TIME);
+ }
+ };
+
+ tv_setting.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+
+ Intent intent = new Intent(context, ZjsnViewer.class);
+ startActivity(intent);
+ }
+ });
+
+ sw_title_on.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
+ @Override
+ public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
+
+ SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
+ if (!preferences.edit().putBoolean("on", isChecked).commit()){
+
+ sw_title_on.setChecked(!isChecked);
+ }
+ }
+ });
+
+ sw_title_auto_run.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
+ @Override
+ public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
+
+ SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
+ if (!preferences.edit().putBoolean("auto_run", isChecked).commit()){
+
+ sw_title_auto_run.setChecked(!isChecked);
+ }
+ }
+ });
+
+ tv_web.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+
+ Intent intent = new Intent(InfoActivity.this, WebActivity.class);
+ intent.putExtra("URL","http://js.ntwikis.com/");
+ intent.putExtra("JS","http://js.ntwikis.com/jsp/apps/cancollezh/charactors/buildtime.jsp");
+ startActivity(intent);
+ }
+ });
+ }
+
+ private void initFragment(){
+
+ travelFragemt = new TravelFragemt();
+ repairFragment = new RepairFragment();
+ buildFragment = new BuildFragment();
+ makeFragment = new MakeFragment();
+
+ ArrayList fragments = new ArrayList<>();
+ fragments.add(travelFragemt);
+ fragments.add(repairFragment);
+ fragments.add(buildFragment);
+ fragments.add(makeFragment);
+
+ tv_travel.setTag(0);
+ tv_repair.setTag(1);
+ tv_build.setTag(2);
+ tv_make.setTag(3);
+ tv_repair.setEnabled(false);
+ tv_build.setEnabled(false);
+ tv_make.setEnabled(false);
+
+ tabs = new ArrayList<>();
+ tabs.add(tv_travel);
+ tabs.add(tv_repair);
+ tabs.add(tv_build);
+ tabs.add(tv_make);
+
+ vp_page.setOffscreenPageLimit(4);
+ pageAdapter adapter = new pageAdapter(getSupportFragmentManager(), fragments);
+
+ vp_page.setAdapter(adapter);
+ vp_page.setCurrentItem(0);
+ }
+
+ private class pageAdapter extends FragmentPagerAdapter{
+
+ ArrayList fragments;
+
+ pageAdapter(FragmentManager fm, ArrayList fragments) {
+ super(fm);
+ this.fragments = fragments;
+ }
+
+ @Override
+ public Fragment getItem(int position) {
+ return fragments.get(position);
+ }
+
+ @Override
+ public int getCount() {
+ return fragments.size();
+ }
+ }
+
+ private void setTab(int position) {
+
+ if (position >= 0 && position < tabs.size()){
+
+ for (int i = 0; i < tabs.size(); i++){
+
+ if (i == position) tabs.get(i).setEnabled(true);
+ else tabs.get(i).setEnabled(false);
+ }
+ }
+ }
+
+ private void refreshView(){
+
+ tv_name.setText(Storage.str_tiduName);
+ tv_drawer_name.setText(Storage.str_tiduName);
+ tv_level.setText("Level: " + DockInfo.level + " (" + DockInfo.exp + "/" + DockInfo.nextExp + ")");
+ tv_drawer_level.setText("Level: " + DockInfo.level + " (" + DockInfo.exp + "/" + DockInfo.nextExp + ")");
+ if (DockInfo.level.equals("150")){
+ tv_level.setText(R.string.max);
+ tv_drawer_level.setText(R.string.max);
+ }
+ }
+
+ private void refreshAllView(){
+
+ refreshView();
+
+ buildFragment.refreshView();
+ repairFragment.refreshView();
+ makeFragment.refreshView();
+ travelFragemt.refreshView();
+ }
+}
diff --git a/app/src/main/java/me/crafter/android/zjsnviewer/NetworkManager.java b/app/src/main/java/me/crafter/android/zjsnviewer/NetworkManager.java
index 44f0465..dd5c668 100644
--- a/app/src/main/java/me/crafter/android/zjsnviewer/NetworkManager.java
+++ b/app/src/main/java/me/crafter/android/zjsnviewer/NetworkManager.java
@@ -26,7 +26,9 @@ public class NetworkManager {
public static String url_init_hm = "api/initGame&t=233&e=3deb25e23f5fdd11d792d63bd66ced7c";
public static String url_passport_p7 = "http://login.alpha.p7game.com/index/passportLogin/";// +username/password
//hm change the login in url as http://login.jianniang.com/index/passportLogin/
- public static String url_passport_hm = "http://login.jianniang.com/index/passportLogin/";// +username/password
+ //hm change the login in url as http://login.jr.moefantasy.com/index/passportLogin/ in 6/4/2016
+ public static String url_passport_hm = "http://login.jr.moefantasy.com/index/passportLogin/";// +username/password
+ public static String url_passport_hm_ios = "http://loginios.jianniang.com/index/passportLogin/";// +username/password
public static String url_login = "index/login/";//+uid
public static String[] url_server_p7 = {
"http://zj.alpha.p7game.com/",
@@ -43,19 +45,28 @@ public class NetworkManager {
};
public static String[] url_server_hm = {
- "http://zj.alpha.jianniang.com/",
- "http://s2.jianniang.com/",
- "http://s3.jianniang.com/",
- "http://s4.jianniang.com/",
- "http://s5.jianniang.com/",
- "http://s6.jianniang.com/",
- "http://s7.jianniang.com/",
- "http://s8.jianniang.com/",
- "http://s9.jianniang.com/",
- "http://s10.jianniang.com/",
- "http://s11.jianniang.com/"
+ "http://zj.alpha.jr.moefantasy.com/",
+ "http://s2.jr.moefantasy.com/",
+ "http://s3.jr.moefantasy.com/",
+ "http://s4.jr.moefantasy.com/",
+ "http://s5.jr.moefantasy.com/",
+ "http://s6.jr.moefantasy.com/",
+ "http://s7.jr.moefantasy.com/",
+ "http://s8.jr.moefantasy.com/",
+ "http://s9.jr.moefantasy.com/",
+ "http://s10.jr.moefantasy.com/",
+ "http://s11.jr.moefantasy.com/",
+ "http://s12.jr.moefantasy.com/"
};
+ public static String[] url_server_hm_ios = {
+ "http://s101.jr.moefantasy.com/",
+ "http://s102.jr.moefantasy.com/",
+ "http://s103.jr.moefantasy.com/",
+ "http://s104.jr.moefantasy.com/",
+ "http://s105.jr.moefantasy.com/",
+ "http://s106.jr.moefantasy.com/"
+ };
public static String getCurrentUnixTime() {
long unixTime = System.currentTimeMillis() / 10L;
return String.valueOf(unixTime);
@@ -70,11 +81,16 @@ public static void updateDockInfo(Context context){
String server = prefs.getString("server", "-1");
if (server.equals("-1")) return;
int serverId = Integer.parseInt(server);
+
if (serverId < 100){
server = url_server_p7[serverId];
- } else {
+ }
+ else if (serverId < 200) {
server = url_server_hm[serverId-100];
}
+ else {
+ server = url_server_hm_ios[serverId-201];
+ }
// Black: Alt Server
boolean altserver = prefs.getBoolean("altserver", false);
@@ -90,16 +106,13 @@ public static void updateDockInfo(Context context){
return;
}
- ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
- List procInfos = activityManager.getRunningAppProcesses();
- for (int i = 0; i < procInfos.size(); i++){
- String processName = procInfos.get(i).processName;
- if (processName.startsWith("com.muka.shipwar") || processName.startsWith("org.huanmeng.Zhanjian2")){
- DockInfo.updateInterval = 15;
- Storage.str_tiduName = Storage.str_gameRunning[Storage.language];
- return;
- }
+
+ if (ZjsnState.getZjsnState() == 0 && prefs.getBoolean("auto_run", true)){
+ DockInfo.updateInterval = 15;
+ Storage.str_tiduName = Storage.str_gameRunning[Storage.language];
+ return;
}
+
String error = "";
try {
@@ -107,8 +120,10 @@ public static void updateDockInfo(Context context){
URL url;
if (serverId < 100){
url = new URL(url_passport_p7 +username+"/"+password);
- } else {
+ }else if (serverId < 200){
url = new URL(url_passport_hm +username+"/"+password);
+ }else {
+ url = new URL(url_passport_hm_ios +username+"/"+password);
}
if (altserver){
url = new URL(prefs.getString("alt_url_login", "") +username+"/"+password);
diff --git a/app/src/main/java/me/crafter/android/zjsnviewer/NotificationSender.java b/app/src/main/java/me/crafter/android/zjsnviewer/NotificationSender.java
index ffe336c..dc357d9 100644
--- a/app/src/main/java/me/crafter/android/zjsnviewer/NotificationSender.java
+++ b/app/src/main/java/me/crafter/android/zjsnviewer/NotificationSender.java
@@ -3,15 +3,14 @@
import android.annotation.TargetApi;
import android.app.Notification;
import android.app.NotificationManager;
-import android.app.PendingIntent;
import android.content.Context;
-import android.content.Intent;
+import android.content.SharedPreferences;
import android.content.res.Resources;
-import android.graphics.Bitmap;
-import android.graphics.BitmapFactory;
+import android.media.RingtoneManager;
import android.net.Uri;
import android.os.Build;
import android.os.PowerManager;
+import android.preference.PreferenceManager;
import android.support.v4.app.NotificationCompat;
public class NotificationSender {
@@ -22,24 +21,44 @@ public class NotificationSender {
public static void notify(final Context context, final String title, final String text) {
final Resources res = context.getResources();
- final Notification.Builder builder = new Notification.Builder(context)
- .setDefaults(Notification.DEFAULT_ALL)
+ final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
+ final boolean screen_light = prefs.getBoolean("notification_screen_light", true);
+ final boolean if_send_vibration = prefs.getBoolean("notification_vibration", true);
+
+ final NotificationCompat.Builder builder = new NotificationCompat.Builder(context)
+// .setDefaults(Notification.DEFAULT_ALL)
.setSmallIcon(R.drawable.logo)
.setContentTitle(title)
.setContentText(text)
- .setStyle(new Notification.BigTextStyle().bigText(text))
- .setPriority(NotificationCompat.PRIORITY_DEFAULT)
+ .setStyle(new NotificationCompat.BigTextStyle().bigText(text))
+// .setStyle(new Notification.InboxStyle())
+// TODO 加个是否显示浮动窗口的选项
+ .setPriority(NotificationCompat.PRIORITY_HIGH)
+ .setDefaults(NotificationCompat.DEFAULT_LIGHTS|NotificationCompat.DEFAULT_SOUND)
+// .setGroup(Storage.NOTIFICATION_GROUP_KEY)
.setContentIntent(Storage.getStartPendingIntent(context))
.setAutoCancel(true);
- PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
- PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, "ZJSN");
- wl.acquire(10000);
- notify(context, builder.build());
+ if (if_send_vibration) {
+ builder.setDefaults(NotificationCompat.DEFAULT_ALL);
+ } else {
+ builder.setVibrate(new long[]{0L});
+ }
+
+ if(screen_light) {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
+ builder.setVisibility(NotificationCompat.VISIBILITY_PUBLIC);
+ } else {
+ PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
+ PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, "ZJSN");
+ wl.acquire(10000);
+ }
+ }
+ SendNotification(context, builder.build());
}
@TargetApi(Build.VERSION_CODES.ECLAIR)
- private static void notify(final Context context, final Notification notification) {
+ private static void SendNotification(final Context context, final Notification notification) {
final NotificationManager nm = (NotificationManager) context
.getSystemService(Context.NOTIFICATION_SERVICE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ECLAIR) {
diff --git a/app/src/main/java/me/crafter/android/zjsnviewer/SettingsCustomize.java b/app/src/main/java/me/crafter/android/zjsnviewer/SettingsCustomize.java
index a0733ac..e19a3d1 100644
--- a/app/src/main/java/me/crafter/android/zjsnviewer/SettingsCustomize.java
+++ b/app/src/main/java/me/crafter/android/zjsnviewer/SettingsCustomize.java
@@ -1,5 +1,6 @@
package me.crafter.android.zjsnviewer;
+import android.content.Intent;
import android.media.Ringtone;
import android.media.RingtoneManager;
import android.net.Uri;
@@ -33,6 +34,7 @@ private void setupSimplePreferencesScreen() {
fakeHeader.setTitle(R.string.pref_header_customize);
getPreferenceScreen().addPreference(fakeHeader);
addPreferencesFromResource(R.xml.pref_part_customize);
+
bindPreferenceSummaryToValue(findPreference("textsize_major"));
bindPreferenceSummaryToValue(findPreference("textsize_minor"));
bindPreferenceSummaryToValue(findPreference("language"));
@@ -53,7 +55,7 @@ public void onClick(View v) {
* A preference value change listener that updates the preference's summary
* to reflect its new value.
*/
- private static Preference.OnPreferenceChangeListener sBindPreferenceSummaryToValueListener = new Preference.OnPreferenceChangeListener() {
+ private Preference.OnPreferenceChangeListener sBindPreferenceSummaryToValueListener = new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object value) {
String stringValue = value.toString();
@@ -83,11 +85,16 @@ else if (preference instanceof RingtonePreference) {
else {
preference.setSummary(stringValue);
}
+
+ Intent intent = new Intent();
+ intent.setAction("OnOrOff");
+ sendBroadcast(intent);
+
return true;
}
};
- private static void bindPreferenceSummaryToValue(Preference preference) {
+ private void bindPreferenceSummaryToValue(Preference preference) {
preference.setOnPreferenceChangeListener(sBindPreferenceSummaryToValueListener);
sBindPreferenceSummaryToValueListener.onPreferenceChange(preference,
PreferenceManager
diff --git a/app/src/main/java/me/crafter/android/zjsnviewer/SettingsNotification.java b/app/src/main/java/me/crafter/android/zjsnviewer/SettingsNotification.java
index de7611a..42e0681 100644
--- a/app/src/main/java/me/crafter/android/zjsnviewer/SettingsNotification.java
+++ b/app/src/main/java/me/crafter/android/zjsnviewer/SettingsNotification.java
@@ -1,15 +1,18 @@
package me.crafter.android.zjsnviewer;
+import android.content.Intent;
import android.media.Ringtone;
import android.media.RingtoneManager;
import android.net.Uri;
import android.os.Bundle;
+import android.preference.EditTextPreference;
import android.preference.ListPreference;
import android.preference.Preference;
import android.preference.PreferenceActivity;
import android.preference.PreferenceCategory;
import android.preference.PreferenceManager;
import android.preference.RingtonePreference;
+import android.preference.SwitchPreference;
import android.support.v7.widget.Toolbar;
import android.text.TextUtils;
import android.view.LayoutInflater;
@@ -33,6 +36,22 @@ private void setupSimplePreferencesScreen() {
fakeHeader.setTitle(R.string.pref_header_notification);
getPreferenceScreen().addPreference(fakeHeader);
addPreferencesFromResource(R.xml.pref_part_notification);
+
+
+ SwitchPreference notification_foreground = (SwitchPreference) findPreference("notification_foreground");
+ Preference.OnPreferenceChangeListener listener = new Preference.OnPreferenceChangeListener() {
+ @Override
+ public boolean onPreferenceChange(Preference preference, Object newValue) {
+
+ Intent intent = new Intent();
+ intent.setAction("OnOrOff");
+ sendBroadcast(intent);
+
+ return true;
+ }
+ };
+ bindPreferenceSummaryToValue(findPreference("notification_msj_name"));
+ notification_foreground.setOnPreferenceChangeListener(listener);
}
private void setupToolBar(){
@@ -50,7 +69,7 @@ public void onClick(View v) {
* A preference value change listener that updates the preference's summary
* to reflect its new value.
*/
- private static Preference.OnPreferenceChangeListener sBindPreferenceSummaryToValueListener = new Preference.OnPreferenceChangeListener() {
+ private Preference.OnPreferenceChangeListener sBindPreferenceSummaryToValueListener = new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object value) {
String stringValue = value.toString();
@@ -76,15 +95,35 @@ else if (preference instanceof RingtonePreference) {
preference.setSummary(name);
}
}
- }
- else {
+ }else if(preference instanceof EditTextPreference){
+
+ if (stringValue.isEmpty()){
+
+ if (preference.getKey().equalsIgnoreCase("notification_msj_name")){
+
+ preference.setSummary(R.string.pref_default_msj_name);
+ }else {
+
+ preference.setSummary("");
+ }
+ }else{
+
+ preference.setSummary(stringValue);
+ }
+ }else {
preference.setSummary(stringValue);
}
+
+
+ Intent intent = new Intent();
+ intent.setAction("OnOrOff");
+ sendBroadcast(intent);
+
return true;
}
};
- private static void bindPreferenceSummaryToValue(Preference preference) {
+ private void bindPreferenceSummaryToValue(Preference preference) {
preference.setOnPreferenceChangeListener(sBindPreferenceSummaryToValueListener);
sBindPreferenceSummaryToValueListener.onPreferenceChange(preference,
PreferenceManager
diff --git a/app/src/main/java/me/crafter/android/zjsnviewer/State.java b/app/src/main/java/me/crafter/android/zjsnviewer/State.java
index f361935..30c049e 100644
--- a/app/src/main/java/me/crafter/android/zjsnviewer/State.java
+++ b/app/src/main/java/me/crafter/android/zjsnviewer/State.java
@@ -2,4 +2,4 @@
public enum State {
DEFAULT, UNKNOWN, INTERRUPT, CONNECTION_FAIL, NO_INTERNET, CONNECTION_RESET, PARSE_ERROR, NO_UPDATE_FOUND, UPDATE_FOUND;
-}
+}
\ No newline at end of file
diff --git a/app/src/main/java/me/crafter/android/zjsnviewer/Storage.java b/app/src/main/java/me/crafter/android/zjsnviewer/Storage.java
index 16e4d07..25ef76d 100644
--- a/app/src/main/java/me/crafter/android/zjsnviewer/Storage.java
+++ b/app/src/main/java/me/crafter/android/zjsnviewer/Storage.java
@@ -8,9 +8,7 @@
import android.preference.PreferenceManager;
import android.text.format.DateFormat;
import android.util.Log;
-import android.widget.RemoteViews;
-import java.util.Calendar;
import java.util.Date;
public class Storage {
@@ -19,6 +17,8 @@ public class Storage {
public static String str_tiduName = "提督の名前";
public static String[] str_reportTitle = {"战舰少女码头报告","战舰少女码头报告","戰艦少女碼頭通知","Warship Girls Dock Report","提督注意書","战舰少女码头报告","喂!看这里!"};
+ public static String[] str_msjreportTitle = {"报告","报","報告"," Report","の報告書","报","吼了一声:喂!看这里!"};
+ public static String[] str_msj_foreground_reportTitle = {"定时报告","报","定時報告"," Daily Report","の定时報告書","定时报告","打了个哈欠(~﹃~)~zZ"};
public static String[] str_locked = {"该槽位已被锁定","槽位锁定","該槽位已被鎖定","Slot Locked","???","x","还不课金么?"};
public static String[] str_idle = {"空闲中","空闲中","閒置中","Idle","未使用","-","闲着呢"};
public static String[] str_hour = {"小时","时","小時","hr","时",":","时"};
@@ -47,6 +47,7 @@ public class Storage {
public static String[] str_notOn = {"未开启","未开启","未啟動","Disabled","起動しない","x","我在睡觉"};
public static String[] str_gameRunning = {"游戏运行中","游戏运行中","遊戲運行中","Game is running","起動しない","-","游戏在运行"};
+ public static final String NOTIFICATION_GROUP_KEY = "zjsn_group";
public static String getZjsnPackageName(Context context){
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
@@ -56,7 +57,7 @@ public static String getZjsnPackageName(Context context){
} else if (serverId < 100){
return "com.muka.shipwar";
} else {
- return "org.huanmeng.Zhanjian2_alipay";
+ return "com.huanmeng.zhanjian2";
}
}
@@ -68,10 +69,17 @@ public static PendingIntent getStartPendingIntent(Context context){
return PendingIntent.getActivity(context, 0, intent, 0);
}
+ public static PendingIntent getInfoIntent(Context context){
+ Intent intent = new Intent(context, InfoActivity.class);
+ intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
+ PendingIntent pendIntent = PendingIntent.getActivity(context, 0, intent, 0);
+ return pendIntent;
+ }
+
public static float getTextSizeMajor(Context context){
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
- String size = prefs.getString("textsize_major", "48");
- float ret = 48;
+ String size = prefs.getString("textsize_major", "24");
+ float ret = 24;
try {
ret = Float.parseFloat(size);
} catch (Exception ex) {}
@@ -81,8 +89,8 @@ public static float getTextSizeMajor(Context context){
public static float getTextSizeMinor(Context context){
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
- String size = prefs.getString("textsize_minor", "48");
- float ret = 48;
+ String size = prefs.getString("textsize_minor", "24");
+ float ret = 24;
try {
ret = Float.parseFloat(size);
} catch (Exception ex) {}
diff --git a/app/src/main/java/me/crafter/android/zjsnviewer/TimerService.java b/app/src/main/java/me/crafter/android/zjsnviewer/TimerService.java
index 4dc9914..0049b18 100644
--- a/app/src/main/java/me/crafter/android/zjsnviewer/TimerService.java
+++ b/app/src/main/java/me/crafter/android/zjsnviewer/TimerService.java
@@ -9,11 +9,13 @@
import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.os.AsyncTask;
+import android.os.Build;
import android.os.Handler;
import android.os.IBinder;
import android.os.PowerManager;
import android.os.SystemClock;
import android.preference.PreferenceManager;
+import android.support.v4.app.NotificationCompat;
import android.util.Log;
import java.util.Timer;
@@ -21,8 +23,9 @@
public class TimerService extends Service {
// constant
- public static final long NOTIFY_INTERVAL = 5 * 1000; // 10 seconds
+ public static long NOTIFY_INTERVAL = 5 * 1000; // 10 seconds
public static TimerService instance;
+ public static int NOTIFICATION_ID = 1314;
public static BroadcastReceiver mReceiver;
@@ -33,6 +36,49 @@ public class TimerService extends Service {
// timer handling
private Timer mTimer = null;
+ private ForegroundReceive receive;
+
+// @Override
+// public int onStartCommand(Intent intent, int flags, int startId) {
+// // If we get killed, after returning from here, restart
+// return START_STICKY;
+// }
+ private void setForeGround(Context context){
+ SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
+ if (prefs.getBoolean("notification_foreground", true)){
+
+ String[] info = DockInfo.getTravelBoard();
+ String title = Storage.str_tiduName;
+ String msj_name = prefs.getString("notification_msj_name","");
+ if (!msj_name.isEmpty()){
+
+ Storage.language = Integer.parseInt(prefs.getString("language", "0"));
+ title = msj_name + Storage.str_msj_foreground_reportTitle[Storage.language];
+ }
+ String text = Storage.str_thereIs[Storage.language] + DockInfo.countTravelIng() + Storage.str_teamsTravelling[Storage.language];
+ String msg = "";
+ NotificationCompat.BigTextStyle style = new NotificationCompat.BigTextStyle()
+ .setBigContentTitle(title)
+ .setSummaryText(text);
+
+ for (int i = 0; i < 4; i++){
+ // style.addLine(info[i]);
+ msg += info[i] + "\n";
+ }
+ style.bigText(msg);
+
+ final NotificationCompat.Builder builder = new NotificationCompat.Builder(context)
+ .setSmallIcon(R.drawable.cat_icon)
+ .setContentTitle(title)
+ .setContentText(text)
+ .setStyle(style)
+ .setGroup(Storage.NOTIFICATION_GROUP_KEY)
+ .setGroupSummary(true)
+ .setContentIntent(Storage.getInfoIntent(context));
+
+ startForeground(NOTIFICATION_ID,builder.build());
+ }
+ }
@Override
public IBinder onBind(Intent intent) {
return null;
@@ -41,19 +87,33 @@ public IBinder onBind(Intent intent) {
@Override
public void onCreate() {
Log.i("TimerService", "onCreate()");
- if (mTimer != null) {
- mTimer.cancel();
- } else {
- mTimer = new Timer();
- instance = this;
- }
if (mReceiver == null){
IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);
filter.addAction(Intent.ACTION_SCREEN_OFF);
mReceiver = new ScreenReceiver();
registerReceiver(mReceiver, filter);
}
+
+ if (mTimer != null) {
+ mTimer.cancel();
+ } else {
+ mTimer = new Timer();
+ instance = this;
+ }
mTimer.scheduleAtFixedRate(new TimeDisplayTimerTask(), 0, NOTIFY_INTERVAL);
+
+ setForeGround(this);
+
+ receive = new ForegroundReceive();
+ IntentFilter filter = new IntentFilter();
+ filter.addAction("OnOrOff");
+ registerReceiver(receive, filter);
+ }
+
+ @Override
+ public void onDestroy() {
+ super.onDestroy();
+ unregisterReceiver(receive);
}
@Override
@@ -77,7 +137,6 @@ public void run() {
mHandler.post(new Runnable() {
@Override
public void run() {
-// Log.i("TimerService", "run() - TimerService Receive Call");
new Proceed().execute();
}
});
@@ -89,21 +148,38 @@ private class Proceed extends AsyncTask {
protected Object doInBackground(Object... arg0){
Context context = instance;
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
- Storage.language = Integer.parseInt(prefs.getString("language", "0"));
- DockInfo.requestUpdate(context);
+ Storage.language = Integer.parseInt(prefs.getString("language", "0"));
+ if (prefs.getBoolean("auto_run", true)) {
+ DockInfo.requestUpdate(context);
+ }
//notification checker
if (DockInfo.shouldNotify(context)){
- NotificationSender.notify(context, Storage.str_reportTitle[Storage.language], DockInfo.getStatusReportAllFull());
+
+ String msj_name = prefs.getString("notification_msj_name","");
+ if (msj_name.isEmpty()){
+
+ NotificationSender.notify(context, Storage.str_reportTitle[Storage.language], DockInfo.getStatusReportAllFull());
+ }else {
+
+ NotificationSender.notify(context, msj_name + Storage.str_msjreportTitle[Storage.language], DockInfo.getStatusReportAllFull());
+ }
}
//check if screen is on
//if screen not on, widget should not update
PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
- if (!pm.isScreenOn()){
+ boolean screenon = true;
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT_WATCH){
+ screenon = pm.isInteractive();
+ } else {
+ screenon = pm.isScreenOn();
+ }
+ if (!screenon){
//Log.i("TimerService", "run() - Screen is off, ignores update.");
} else {
int currentUnix = DockInfo.currentUnix();
if (currentUnix - lastWidgetUpdate >= Integer.parseInt(prefs.getString("refresh", "60"))){
+
lastWidgetUpdate = currentUnix;
Widget_Main.updateWidget(context);
Widget_Travel.updateWidget(context);
@@ -113,9 +189,40 @@ protected Object doInBackground(Object... arg0){
} else {
//not time yet, ignore widget update
}
+ setForeGround(context);
}
return null;
}
+
+ @Override
+ protected void onPostExecute(Object o) {
+ super.onPostExecute(o);
+
+ SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(instance);
+ if (NOTIFY_INTERVAL != (Long.valueOf(prefs.getString("refresh", "60"))) * 1000) {
+
+ NOTIFY_INTERVAL = (Long.valueOf(prefs.getString("refresh", "60"))) * 1000;
+ mTimer.cancel();
+ mTimer = new Timer();
+ mTimer.scheduleAtFixedRate(new TimeDisplayTimerTask(), NOTIFY_INTERVAL, NOTIFY_INTERVAL);
+ }
+ Log.i("TimerService", "run() - TimerService Receive Call\nNOTIFY_INTERVAL:" + NOTIFY_INTERVAL + "\nrefresh:" + prefs.getString("refresh", "60"));
+ }
}
+ public class ForegroundReceive extends BroadcastReceiver{
+
+ @Override
+ public void onReceive(Context context, Intent intent) {
+
+ SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
+ if (prefs.getBoolean("notification_foreground", true)){
+
+ setForeGround(context);
+ }else {
+
+ stopForeground(true);
+ }
+ }
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/me/crafter/android/zjsnviewer/UpdateTask.java b/app/src/main/java/me/crafter/android/zjsnviewer/UpdateTask.java
new file mode 100644
index 0000000..d9a044c
--- /dev/null
+++ b/app/src/main/java/me/crafter/android/zjsnviewer/UpdateTask.java
@@ -0,0 +1,42 @@
+package me.crafter.android.zjsnviewer;
+
+import android.content.Context;
+import android.content.Intent;
+import android.os.AsyncTask;
+
+/**
+ * Created by paleneutron on 6/3/2016.
+ */
+public class UpdateTask extends AsyncTask {
+ private Context context=null;
+ private onUpdateTaskStateChange updateTaskStateChange;
+ public UpdateTask(Context main_context){
+ context = main_context;
+ }
+
+ public void setUpdateTaskStateChange(onUpdateTaskStateChange updateTaskStateChange) {
+ this.updateTaskStateChange = updateTaskStateChange;
+ }
+
+ @Override
+ protected Void doInBackground(Void... params) {
+ DockInfo.requestUpdate(context);
+ Widget_Main.updateWidget(context);
+ Widget_Travel.updateWidget(context);
+ Widget_Repair.updateWidget(context);
+ Widget_Build.updateWidget(context);
+ Widget_Make.updateWidget(context);
+ context.startService(new Intent(context, TimerService.class));
+ return null;
+ }
+ @Override
+ protected void onPostExecute(Void aVoid) {
+ super.onPostExecute(aVoid);
+ if (null != updateTaskStateChange) updateTaskStateChange.AfterTask();
+ }
+
+ public interface onUpdateTaskStateChange{
+
+ void AfterTask();
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/me/crafter/android/zjsnviewer/Widget_Main.java b/app/src/main/java/me/crafter/android/zjsnviewer/Widget_Main.java
index e489f79..d377da5 100644
--- a/app/src/main/java/me/crafter/android/zjsnviewer/Widget_Main.java
+++ b/app/src/main/java/me/crafter/android/zjsnviewer/Widget_Main.java
@@ -7,11 +7,12 @@
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
+import android.util.Log;
import android.widget.RemoteViews;
-
public class Widget_Main extends AppWidgetProvider {
+ private static final String SYNC_CLICKED = "automaticWidgetSyncButtonClick";
@Override
public void onEnabled(Context context) {
context.startService(new Intent(context, TimerService.class));
@@ -29,6 +30,14 @@ public void onDisabled(Context context) {
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds){
context.startService(new Intent(context, TimerService.class));
super.onUpdate(context, appWidgetManager, appWidgetIds);
+ RemoteViews remoteViews;
+ ComponentName watchWidget;
+
+ remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget__main);
+ watchWidget = new ComponentName(context, Widget_Main.class);
+
+ remoteViews.setOnClickPendingIntent(R.id.imageButton, getPendingSelfIntent(context, SYNC_CLICKED));
+ appWidgetManager.updateAppWidget(watchWidget, remoteViews);
updateWidget(context);
}
@@ -39,6 +48,34 @@ public void onAppWidgetOptionsChanged(Context context, AppWidgetManager appWidge
updateWidget(context);
}
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ // TODO Auto-generated method stub
+ super.onReceive(context, intent);
+
+ if (SYNC_CLICKED.equals(intent.getAction())) {
+ Log.i("widget","clicked");
+
+ AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
+ DockInfo.updateInterval = 0;
+ new UpdateTask(context).execute();
+ RemoteViews remoteViews;
+ ComponentName watchWidget;
+
+ remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget__main);
+ watchWidget = new ComponentName(context, Widget_Main.class);
+
+// remoteViews.setTextViewText(R.id.imageButton, "TESTING");
+
+ appWidgetManager.updateAppWidget(watchWidget, remoteViews);
+
+ }
+ }
+ protected PendingIntent getPendingSelfIntent(Context context, String action) {
+ Intent intent = new Intent(context, getClass());
+ intent.setAction(action);
+ return PendingIntent.getBroadcast(context, 0, intent, 0);
+ }
public static void updateWidget(Context context){
updateWidget(context, AppWidgetManager.getInstance(context));
@@ -46,10 +83,11 @@ public static void updateWidget(Context context){
public static void updateWidget(Context context, AppWidgetManager appWidgetManager){
//Log.i("Widget_Main", "updateWidget()");
- PendingIntent pending = Storage.getStartPendingIntent(context);
+// PendingIntent pending = Storage.getStartPendingIntent(context);
+// PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget__main);
-
- views.setOnClickPendingIntent(R.id.imageButton, pending);
+//
+// views.setOnClickPendingIntent(R.id.imageButton, pendingIntent);
//SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
//views.setTextViewText(R.id.textView, "Last Update: " + sdf.format(new Date()));
diff --git a/app/src/main/java/me/crafter/android/zjsnviewer/ZjsnState.java b/app/src/main/java/me/crafter/android/zjsnviewer/ZjsnState.java
new file mode 100644
index 0000000..ea84064
--- /dev/null
+++ b/app/src/main/java/me/crafter/android/zjsnviewer/ZjsnState.java
@@ -0,0 +1,32 @@
+package me.crafter.android.zjsnviewer;
+
+import android.annotation.TargetApi;
+import android.app.AppOpsManager;
+import android.app.usage.UsageEvents;
+import android.app.usage.UsageStatsManager;
+import android.content.Context;
+import android.os.Build;
+import android.util.Log;
+
+import com.jaredrummler.android.processes.AndroidProcesses;
+import com.jaredrummler.android.processes.models.AndroidAppProcess;
+
+import java.util.List;
+/**
+ * Created by JohnnySun on 2015/11/19.
+ * Edit by PaleNeutron on 2016/5/25.
+ */
+public class ZjsnState {
+//if running return 0
+ public static int getZjsnState() {
+ List processes = AndroidProcesses.getRunningAppProcesses();
+ for (int i = 0; i < processes.size(); i++) {
+ String processName = processes.get(i).name;
+ if (processName.startsWith("com.huanmeng.zhanjian2")||processName.startsWith("com.muka.shipwar")){
+ Log.i("Zjsn_ACTIVE", "Zjsn is in processes");
+ return 0;
+ }
+ }
+ return 1;
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/me/crafter/android/zjsnviewer/ZjsnViewer.java b/app/src/main/java/me/crafter/android/zjsnviewer/ZjsnViewer.java
index ae21a0c..c25fe1a 100644
--- a/app/src/main/java/me/crafter/android/zjsnviewer/ZjsnViewer.java
+++ b/app/src/main/java/me/crafter/android/zjsnviewer/ZjsnViewer.java
@@ -10,11 +10,13 @@
import android.preference.PreferenceActivity;
import android.preference.PreferenceCategory;
import android.preference.PreferenceManager;
+import android.preference.PreferenceScreen;
import android.preference.RingtonePreference;
+import android.support.v7.widget.Toolbar;
import android.text.TextUtils;
-import android.util.Log;
+import android.view.LayoutInflater;
import android.view.View;
-import android.widget.Toast;
+import android.widget.LinearLayout;
@SuppressWarnings("deprecation")
public class ZjsnViewer extends PreferenceActivity {
@@ -22,10 +24,28 @@ public class ZjsnViewer extends PreferenceActivity {
@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
+ setupToolBar();
setupSimplePreferencesScreen();
registerListener(getApplicationContext());
}
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ }
+
+ private void setupToolBar(){
+ LinearLayout root = (LinearLayout)findViewById(android.R.id.list).getParent().getParent().getParent();
+ Toolbar bar = (Toolbar) LayoutInflater.from(this).inflate(R.layout.pref_shared_toolbar, root, false);
+ root.addView(bar, 0); // insert at top
+ bar.setNavigationOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ finish();
+ }
+ });
+ }
+
private void setupSimplePreferencesScreen() {
addPreferencesFromResource(R.xml.pref_shared_top);
@@ -35,6 +55,11 @@ private void setupSimplePreferencesScreen() {
getPreferenceScreen().addPreference(fakeHeader);
addPreferencesFromResource(R.xml.pref_part_main_settings);
+ //hide "on" and "auto_run"
+ PreferenceScreen screen = getPreferenceScreen();
+ screen.removePreference(screen.findPreference("on"));
+ screen.removePreference(screen.findPreference("auto_run"));
+
// Add 'other' preferences.
fakeHeader = new PreferenceCategory(this);
fakeHeader.setTitle(R.string.pref_header_other);
diff --git a/app/src/main/java/me/crafter/android/zjsnviewer/infofragment/BuildFragment.java b/app/src/main/java/me/crafter/android/zjsnviewer/infofragment/BuildFragment.java
new file mode 100644
index 0000000..7da0905
--- /dev/null
+++ b/app/src/main/java/me/crafter/android/zjsnviewer/infofragment/BuildFragment.java
@@ -0,0 +1,51 @@
+package me.crafter.android.zjsnviewer.infofragment;
+
+import android.os.Bundle;
+import android.support.annotation.Nullable;
+import android.support.v4.app.Fragment;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.TextView;
+
+import butterknife.BindView;
+import butterknife.ButterKnife;
+import me.crafter.android.zjsnviewer.DockInfo;
+import me.crafter.android.zjsnviewer.R;
+
+
+public class BuildFragment extends Fragment {
+
+ @BindView(R.id.textView1)
+ TextView textView1;
+ @BindView(R.id.textView2)
+ TextView textView2;
+ @BindView(R.id.textView3)
+ TextView textView3;
+ @BindView(R.id.textView4)
+ TextView textView4;
+
+ @Nullable
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
+
+ View view = inflater.inflate(R.layout.widget__build, null);
+ ButterKnife.bind(this, view);
+ return view;
+ }
+
+ @Override
+ public void onActivityCreated(@Nullable Bundle savedInstanceState) {
+ super.onActivityCreated(savedInstanceState);
+ refreshView();
+ }
+
+ public void refreshView(){
+
+ String[] info = DockInfo.getBuildBoard();
+ textView1.setText(info[0]);
+ textView2.setText(info[1]);
+ textView3.setText(info[2]);
+ textView4.setText(info[3]);
+ }
+}
diff --git a/app/src/main/java/me/crafter/android/zjsnviewer/infofragment/MakeFragment.java b/app/src/main/java/me/crafter/android/zjsnviewer/infofragment/MakeFragment.java
new file mode 100644
index 0000000..4dac87e
--- /dev/null
+++ b/app/src/main/java/me/crafter/android/zjsnviewer/infofragment/MakeFragment.java
@@ -0,0 +1,50 @@
+package me.crafter.android.zjsnviewer.infofragment;
+
+import android.os.Bundle;
+import android.support.annotation.Nullable;
+import android.support.v4.app.Fragment;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.TextView;
+
+import butterknife.BindView;
+import butterknife.ButterKnife;
+import me.crafter.android.zjsnviewer.DockInfo;
+import me.crafter.android.zjsnviewer.R;
+
+public class MakeFragment extends Fragment {
+
+ @BindView(R.id.textView1)
+ TextView textView1;
+ @BindView(R.id.textView2)
+ TextView textView2;
+ @BindView(R.id.textView3)
+ TextView textView3;
+ @BindView(R.id.textView4)
+ TextView textView4;
+
+ @Nullable
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
+
+ View view = inflater.inflate(R.layout.widget__make, null);
+ ButterKnife.bind(this, view);
+ return view;
+ }
+
+ @Override
+ public void onActivityCreated(@Nullable Bundle savedInstanceState) {
+ super.onActivityCreated(savedInstanceState);
+ refreshView();
+ }
+
+ public void refreshView(){
+
+ String[] info = DockInfo.getMakeBoard();
+ textView1.setText(info[0]);
+ textView2.setText(info[1]);
+ textView3.setText(info[2]);
+ textView4.setText(info[3]);
+ }
+}
diff --git a/app/src/main/java/me/crafter/android/zjsnviewer/infofragment/RepairFragment.java b/app/src/main/java/me/crafter/android/zjsnviewer/infofragment/RepairFragment.java
new file mode 100644
index 0000000..656f7d1
--- /dev/null
+++ b/app/src/main/java/me/crafter/android/zjsnviewer/infofragment/RepairFragment.java
@@ -0,0 +1,51 @@
+package me.crafter.android.zjsnviewer.infofragment;
+
+import android.os.Bundle;
+import android.support.annotation.Nullable;
+import android.support.v4.app.Fragment;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.TextView;
+
+import butterknife.BindView;
+import butterknife.ButterKnife;
+import me.crafter.android.zjsnviewer.DockInfo;
+import me.crafter.android.zjsnviewer.R;
+
+
+public class RepairFragment extends Fragment {
+
+ @BindView(R.id.textView1)
+ TextView textView1;
+ @BindView(R.id.textView2)
+ TextView textView2;
+ @BindView(R.id.textView3)
+ TextView textView3;
+ @BindView(R.id.textView4)
+ TextView textView4;
+
+ @Nullable
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
+
+ View view = inflater.inflate(R.layout.widget__repair, null);
+ ButterKnife.bind(this, view);
+ return view;
+ }
+
+ @Override
+ public void onActivityCreated(@Nullable Bundle savedInstanceState) {
+ super.onActivityCreated(savedInstanceState);
+ refreshView();
+ }
+
+ public void refreshView(){
+
+ String[] info = DockInfo.getRepairBoard();
+ textView1.setText(info[0]);
+ textView2.setText(info[1]);
+ textView3.setText(info[2]);
+ textView4.setText(info[3]);
+ }
+}
diff --git a/app/src/main/java/me/crafter/android/zjsnviewer/infofragment/TravelFragemt.java b/app/src/main/java/me/crafter/android/zjsnviewer/infofragment/TravelFragemt.java
new file mode 100644
index 0000000..198e0ff
--- /dev/null
+++ b/app/src/main/java/me/crafter/android/zjsnviewer/infofragment/TravelFragemt.java
@@ -0,0 +1,51 @@
+package me.crafter.android.zjsnviewer.infofragment;
+
+import android.os.Bundle;
+import android.support.annotation.Nullable;
+import android.support.v4.app.Fragment;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.TextView;
+
+import butterknife.BindView;
+import butterknife.ButterKnife;
+import me.crafter.android.zjsnviewer.DockInfo;
+import me.crafter.android.zjsnviewer.R;
+
+
+public class TravelFragemt extends Fragment {
+
+ @BindView(R.id.textView1)
+ TextView textView1;
+ @BindView(R.id.textView2)
+ TextView textView2;
+ @BindView(R.id.textView3)
+ TextView textView3;
+ @BindView(R.id.textView4)
+ TextView textView4;
+
+ @Nullable
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
+
+ View view = inflater.inflate(R.layout.widget__travel, null);
+ ButterKnife.bind(this, view);
+ return view;
+ }
+
+ @Override
+ public void onActivityCreated(@Nullable Bundle savedInstanceState) {
+ super.onActivityCreated(savedInstanceState);
+ refreshView();
+ }
+
+ public void refreshView(){
+
+ String[] info = DockInfo.getTravelBoard();
+ textView1.setText(info[0]);
+ textView2.setText(info[1]);
+ textView3.setText(info[2]);
+ textView4.setText(info[3]);
+ }
+}
diff --git a/app/src/main/java/me/crafter/android/zjsnviewer/webactivity.java b/app/src/main/java/me/crafter/android/zjsnviewer/webactivity.java
new file mode 100644
index 0000000..aab345a
--- /dev/null
+++ b/app/src/main/java/me/crafter/android/zjsnviewer/webactivity.java
@@ -0,0 +1,58 @@
+package me.crafter.android.zjsnviewer;
+
+import android.app.Activity;
+import android.os.Bundle;
+import android.support.v7.widget.Toolbar;
+import android.view.View;
+import android.webkit.WebSettings;
+import android.webkit.WebView;
+import android.webkit.WebViewClient;
+
+import butterknife.BindView;
+import butterknife.ButterKnife;
+
+public class WebActivity extends Activity{
+
+ @BindView(R.id.web_view)
+ WebView webView;
+ @BindView(R.id.toolbar)
+ Toolbar toolbar;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.layout_web);
+ ButterKnife.bind(this);
+
+ toolbar.setTitle("web");
+ toolbar.setNavigationOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ finish();
+ }
+ });
+
+ String url = getIntent().getStringExtra("URL");
+ final String js = getIntent().getStringExtra("JS");
+
+ webView.getSettings().setAllowFileAccess(true);
+ webView.getSettings().setDomStorageEnabled(true);
+ webView.getSettings().setDatabaseEnabled(true);
+ webView.getSettings().setJavaScriptEnabled(true);
+ webView.getSettings().setSupportZoom(true);
+ webView.getSettings().setBuiltInZoomControls(true);
+ webView.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT);
+ webView.getSettings().setDefaultTextEncodingName("UTF-8");
+
+ webView.setWebViewClient(new WebViewClient(){
+
+ @Override
+ public void onPageFinished(WebView view, String url) {
+ super.onPageFinished(view, url);
+ webView.loadUrl(js);
+ }
+ });
+
+ webView.loadUrl(url);
+ }
+}
diff --git a/app/src/main/java/me/crafter/android/zjsnviewer/zjsApplication.java b/app/src/main/java/me/crafter/android/zjsnviewer/zjsApplication.java
new file mode 100644
index 0000000..75f1052
--- /dev/null
+++ b/app/src/main/java/me/crafter/android/zjsnviewer/zjsApplication.java
@@ -0,0 +1,20 @@
+package me.crafter.android.zjsnviewer;
+
+import android.app.Application;
+import android.content.Intent;
+
+/**
+ * @author traburiss
+ * @date 2016/6/6
+ * @info ZjsnViewer
+ * @desc
+ */
+
+public class zjsApplication extends Application{
+
+ @Override
+ public void onCreate() {
+ super.onCreate();
+ startService(new Intent(this, TimerService.class));
+ }
+}
diff --git a/app/src/main/res/drawable-hdpi-v11/cat_icon.png b/app/src/main/res/drawable-hdpi-v11/cat_icon.png
new file mode 100644
index 0000000..41fe2c3
Binary files /dev/null and b/app/src/main/res/drawable-hdpi-v11/cat_icon.png differ
diff --git a/app/src/main/res/drawable-hdpi-v9/cat_icon.png b/app/src/main/res/drawable-hdpi-v9/cat_icon.png
new file mode 100644
index 0000000..636b6fa
Binary files /dev/null and b/app/src/main/res/drawable-hdpi-v9/cat_icon.png differ
diff --git a/app/src/main/res/drawable-hdpi/cat_icon.png b/app/src/main/res/drawable-hdpi/cat_icon.png
new file mode 100644
index 0000000..e2f8db2
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/cat_icon.png differ
diff --git a/app/src/main/res/drawable-mdpi-v11/cat_icon.png b/app/src/main/res/drawable-mdpi-v11/cat_icon.png
new file mode 100644
index 0000000..d34ed4a
Binary files /dev/null and b/app/src/main/res/drawable-mdpi-v11/cat_icon.png differ
diff --git a/app/src/main/res/drawable-mdpi-v9/cat_icon.png b/app/src/main/res/drawable-mdpi-v9/cat_icon.png
new file mode 100644
index 0000000..4a4a15b
Binary files /dev/null and b/app/src/main/res/drawable-mdpi-v9/cat_icon.png differ
diff --git a/app/src/main/res/drawable-mdpi/cat_icon.png b/app/src/main/res/drawable-mdpi/cat_icon.png
new file mode 100644
index 0000000..2f8cf63
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/cat_icon.png differ
diff --git a/app/src/main/res/drawable-xhdpi-v11/cat_icon.png b/app/src/main/res/drawable-xhdpi-v11/cat_icon.png
new file mode 100644
index 0000000..0aa35ec
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi-v11/cat_icon.png differ
diff --git a/app/src/main/res/drawable-xhdpi-v9/cat_icon.png b/app/src/main/res/drawable-xhdpi-v9/cat_icon.png
new file mode 100644
index 0000000..7ef67c8
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi-v9/cat_icon.png differ
diff --git a/app/src/main/res/drawable-xhdpi/cat_icon.png b/app/src/main/res/drawable-xhdpi/cat_icon.png
new file mode 100644
index 0000000..0cbf31e
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/cat_icon.png differ
diff --git a/app/src/main/res/drawable-xxhdpi-v11/cat_icon.png b/app/src/main/res/drawable-xxhdpi-v11/cat_icon.png
new file mode 100644
index 0000000..f9ad02d
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi-v11/cat_icon.png differ
diff --git a/app/src/main/res/drawable-xxhdpi-v9/cat_icon.png b/app/src/main/res/drawable-xxhdpi-v9/cat_icon.png
new file mode 100644
index 0000000..cdb1455
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi-v9/cat_icon.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/cat_icon.png b/app/src/main/res/drawable-xxhdpi/cat_icon.png
new file mode 100644
index 0000000..58d2c3e
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/cat_icon.png differ
diff --git a/app/src/main/res/drawable/background_color.xml b/app/src/main/res/drawable/background_color.xml
new file mode 100644
index 0000000..403a646
--- /dev/null
+++ b/app/src/main/res/drawable/background_color.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/text_color.xml b/app/src/main/res/drawable/text_color.xml
new file mode 100644
index 0000000..42def63
--- /dev/null
+++ b/app/src/main/res/drawable/text_color.xml
@@ -0,0 +1,9 @@
+
+
+
+ -
+
+ -
+
+
+
diff --git a/app/src/main/res/layout/activity_info.xml b/app/src/main/res/layout/activity_info.xml
new file mode 100644
index 0000000..364fc4b
--- /dev/null
+++ b/app/src/main/res/layout/activity_info.xml
@@ -0,0 +1,315 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/layout_web.xml b/app/src/main/res/layout/layout_web.xml
new file mode 100644
index 0000000..dfadda6
--- /dev/null
+++ b/app/src/main/res/layout/layout_web.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/pref_shared_toolbar.xml b/app/src/main/res/layout/pref_shared_toolbar.xml
index 9a74e6e..ef48433 100644
--- a/app/src/main/res/layout/pref_shared_toolbar.xml
+++ b/app/src/main/res/layout/pref_shared_toolbar.xml
@@ -9,6 +9,7 @@
android:minHeight="?attr/actionBarSize"
app:navigationContentDescription="@string/abc_action_bar_up_description"
android:background="?attr/colorPrimary"
+ app:titleTextColor="@color/font_white"
app:navigationIcon="?attr/homeAsUpIndicator"
app:title="@string/title_actionbar_default"
/>
\ No newline at end of file
diff --git a/app/src/main/res/values-v21/styles.xml b/app/src/main/res/values-v21/styles.xml
new file mode 100644
index 0000000..ae28ca3
--- /dev/null
+++ b/app/src/main/res/values-v21/styles.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
index 1252343..ddbe25e 100644
--- a/app/src/main/res/values/colors.xml
+++ b/app/src/main/res/values/colors.xml
@@ -7,7 +7,13 @@
#070707
#fafafa
-
-
+ #000000
+ #ffffff
+ #aaaaaa
+ #f5f5f5
+ #f5f5f5
+ #28a6d8
+ #77ffffff
+ #2896d8
\ No newline at end of file
diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml
index 452944e..f287677 100644
--- a/app/src/main/res/values/dimens.xml
+++ b/app/src/main/res/values/dimens.xml
@@ -9,4 +9,6 @@ http://developer.android.com/guide/topics/appwidgets/index.html#CreatingLayout
12dp
12dp
+ 20sp
+
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index b9aa563..890401b 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -10,17 +10,25 @@
ZjsnViewer - 远征
ZjsnViewer - 建造
ZjsnViewer - 开发
+ 修理
+ 远征
+ 建造
+ 开发
加载未完成
加载未完成
Loading...
+ 提督の名前
+ Level: 150 (MAX)
+ 设置
+ 请设置提督的账号密码
+
SettingsInfo
Hello world!
Settings
ZjsnViewer
-
检查更新中
网络不给力,检查失败 QwQ
无法检测更新,可能当前版本过旧
diff --git a/app/src/main/res/values/strings_activity_settings.xml b/app/src/main/res/values/strings_activity_settings.xml
index fdd7f6f..b2abf7d 100644
--- a/app/src/main/res/values/strings_activity_settings.xml
+++ b/app/src/main/res/values/strings_activity_settings.xml
@@ -9,12 +9,14 @@
自定义
其他
黑科技
+ 提督信息
用户名/密码/服务器
远征/入渠/建造结束通知
- 挂件刷新时间
+ 数据刷新时间
字体大小/显示方式
其他
+ 直接查看提督信息
关于
战舰少女Viewer 2.6 by 提督の機霸\n©2014–2015 crafter.me
diff --git a/app/src/main/res/values/strings_pref_values.xml b/app/src/main/res/values/strings_pref_values.xml
index a5d42d3..3b1a4d0 100644
--- a/app/src/main/res/values/strings_pref_values.xml
+++ b/app/src/main/res/values/strings_pref_values.xml
@@ -4,12 +4,13 @@
此处输入用户名
密码
服务器
+ 此处输入秘书舰称谓
语言/显示形式
- 简体中文
- 简体中文短
- - 正體中文
+ - 繁體中文
- English
- 日本語
- 精简 Lite スリム化
@@ -26,30 +27,54 @@
- - [国] ZERO
- - [国] 胡德
- - [国] 萨拉托加
- - [国] 俾斯麦
- - [国] 声望
- - [国] 纳尔逊
- - [国] 空想
- - [国] 海伦娜
- - [国] 突击者
- - [国] 黎塞留
- - [国] 贝尔法斯特
- - [国] 追赶者
- - [台] 胡德
- - [台] 萨拉托加
- - [台] 俾斯麦
- - [台] 声望
- - [台] 纳尔逊
- - [台] 空想
- - [台] 海伦娜
- - [台] 突击者
- - [台] 黎赛留
- - [台] 贝尔法斯特
+ - [战舰少女R] 胡德
+ - [战舰少女R] 萨拉托加
+ - [战舰少女R] 俾斯麦
+ - [战舰少女R] 声望
+ - [战舰少女R] 纳尔逊
+ - [战舰少女R] 空想
+ - [战舰少女R] 海伦娜
+ - [战舰少女R] 突击者
+ - [战舰少女R] 黎赛留
+ - [战舰少女R] 贝尔法斯特
+ - [战舰少女R] 埃塞克斯
+ - [战舰少女R] 列克星敦
+ - [战舰少女R] 欧根亲王
+ - [战舰少女R] 提尔比茨
+ - [战舰少女R] 大青花鱼
+ - [战舰少女R] 阿拉斯加
+ - [战舰少女R] 皇家方舟
+ - [战舰少女] ZERO
+ - [战舰少女] 胡德
+ - [战舰少女] 萨拉托加
+ - [战舰少女] 俾斯麦
+ - [战舰少女] 声望
+ - [战舰少女] 纳尔逊
+ - [战舰少女] 空想
+ - [战舰少女] 海伦娜
+ - [战舰少女] 突击者
+ - [战舰少女] 黎塞留
+ - [战舰少女] 贝尔法斯特
+ - [战舰少女] 追赶者
+ - 101
+ - 102
+ - 103
+ - 104
+ - 105
+ - 106
+ - 107
+ - 108
+ - 109
+ - 110
+ - 111
+ - 201
+ - 202
+ - 203
+ - 204
+ - 205
+ - 206
- 0
- 1
- 2
@@ -62,19 +87,9 @@
- 9
- 10
- 11
- - 101
- - 102
- - 103
- - 104
- - 105
- - 106
- - 107
- - 108
- - 109
- - 110
- 挂件刷新时间
+ 数据刷新时间
- 5秒
- 10秒
@@ -95,11 +110,16 @@
总开关
+ 自动模式
+ 设置秘书舰
+ 常驻通知栏
开启推送通知
远征结束通知
维修结束通知
建造结束通知
开发结束通知
+ 通知时点亮屏幕
+ 通知时震动
Turn On Notifications
Expedition Notifications
@@ -108,10 +128,10 @@
Constriction Notifications (Equipment)
信息挂件字体大小
- 48
+ 24
主挂件字体大小
- 48
+ 24
黑科技开关
比较新奇的玩意,请谨慎使用
@@ -133,4 +153,4 @@
结束时间
你将不会在以上时间段内收到推送通知。
-
\ No newline at end of file
+
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
index 1a6b3a9..85855a8 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -1,8 +1,9 @@
-
diff --git a/app/src/main/res/xml/pref_part_general.xml b/app/src/main/res/xml/pref_part_general.xml
index f1a7eff..ae14c1e 100644
--- a/app/src/main/res/xml/pref_part_general.xml
+++ b/app/src/main/res/xml/pref_part_general.xml
@@ -22,7 +22,7 @@
+
+
+
+
+
+
+
+
+
+