Skip to content
This repository was archived by the owner on Mar 26, 2019. It is now read-only.

Commit 9bca996

Browse files
committed
Update version to 2.2.9, Fix fabric issues #80 #101
1 parent 75e55f3 commit 9bca996

File tree

7 files changed

+109
-34
lines changed

7 files changed

+109
-34
lines changed

KUAS-AP-Material/app/build.gradle

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -16,21 +16,22 @@ repositories {
1616

1717

1818
android {
19-
compileSdkVersion 24
20-
buildToolsVersion "24.0.2"
19+
compileSdkVersion 25
20+
buildToolsVersion "25.0.2"
2121

2222
defaultConfig {
2323
applicationId "com.kuas.ap"
2424
minSdkVersion 15
25-
targetSdkVersion 24
26-
versionCode 20208
27-
versionName "2.2.8"
25+
targetSdkVersion 25
26+
versionCode 20209
27+
versionName "2.2.9"
2828
}
2929

3030
packagingOptions {
3131
exclude 'META-INF/LICENSE.txt'
3232
exclude 'META-INF/NOTICE.txt'
3333
exclude '.readme'
34+
return void
3435
}
3536

3637
buildTypes {
@@ -59,22 +60,23 @@ android {
5960
'proguard-crashlytics.pro'
6061
}
6162
}
63+
return void
6264
}
6365

6466
dependencies {
6567
compile fileTree(include: ['*.jar'], dir: 'libs')
66-
compile 'com.android.support:appcompat-v7:24.1.1'
67-
compile 'com.android.support:design:24.1.1'
68-
compile 'com.android.support:customtabs:24.1.1'
69-
compile 'com.android.support:cardview-v7:24.1.1'
70-
compile 'com.android.support:recyclerview-v7:24.1.1'
71-
compile 'com.google.android.gms:play-services-analytics:9.4.0'
72-
compile 'com.google.firebase:firebase-config:9.4.0'
68+
compile 'com.android.support:appcompat-v7:25.2.0'
69+
compile 'com.android.support:design:25.2.0'
70+
compile 'com.android.support:customtabs:25.2.0'
71+
compile 'com.android.support:cardview-v7:25.2.0'
72+
compile 'com.android.support:recyclerview-v7:25.2.0'
73+
compile 'com.google.android.gms:play-services-analytics:10.2.0'
74+
compile 'com.google.firebase:firebase-config:10.2.0'
7375
compile 'com.loopj.android:android-async-http:1.4.9'
7476
compile 'com.google.code.gson:gson:2.7'
75-
compile 'com.wdullaer:materialdatetimepicker:2.5.0'
77+
compile 'com.wdullaer:materialdatetimepicker:3.1.2'
7678
compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.4'
77-
compile('com.crashlytics.sdk.android:crashlytics:2.6.1@aar') {
79+
compile('com.crashlytics.sdk.android:crashlytics:2.6.6@aar') {
7880
transitive = true;
7981
}
8082
}

KUAS-AP-Material/app/src/main/AndroidManifest.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
<uses-permission android:name="android.permission.WRITE_SETTINGS"/>
1212
<uses-permission android:name="android.permission.CHANGE_CONFIGURATION"/>
1313
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
14+
<uses-permission android:name="android.permission.ACCESS_NOTIFICATION_POLICY"/>
1415

1516
<application
1617
android:name="silent.kuasapmaterial.base.SilentApplication"

KUAS-AP-Material/app/src/main/java/silent/kuasapmaterial/CourseVibrateAlarmService.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
package silent.kuasapmaterial;
22

3+
import android.app.NotificationManager;
34
import android.app.Service;
5+
import android.content.Context;
46
import android.content.Intent;
57
import android.media.AudioManager;
8+
import android.os.Build;
69
import android.os.Bundle;
710
import android.os.IBinder;
811
import android.os.PowerManager;
@@ -47,6 +50,13 @@ public int onStartCommand(Intent intent, int flags, int startId) {
4750
Boolean isVibrate = bundle.getBoolean("mode", false);
4851

4952
AudioManager audioManager = (AudioManager) getSystemService(AUDIO_SERVICE);
53+
NotificationManager notificationManager =
54+
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
55+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N &&
56+
!notificationManager.isNotificationPolicyAccessGranted()) {
57+
stopService();
58+
return START_STICKY;
59+
}
5060
if (isVibrate) {
5161
Memory.setInt(this, Constant.PREF_COURSE_VIBRATE_USER_SETTING,
5262
audioManager.getRingerMode());

KUAS-AP-Material/app/src/main/java/silent/kuasapmaterial/SettingsActivity.java

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,20 @@
11
package silent.kuasapmaterial;
22

3+
import android.annotation.TargetApi;
34
import android.app.Dialog;
5+
import android.app.NotificationManager;
46
import android.content.ActivityNotFoundException;
7+
import android.content.Context;
8+
import android.content.DialogInterface;
59
import android.content.Intent;
610
import android.content.pm.PackageInfo;
711
import android.content.pm.PackageManager;
812
import android.net.Uri;
13+
import android.os.Build;
914
import android.os.Bundle;
1015
import android.support.design.widget.Snackbar;
1116
import android.support.v4.content.ContextCompat;
17+
import android.support.v7.app.AlertDialog;
1218
import android.support.v7.widget.SwitchCompat;
1319
import android.view.View;
1420
import android.widget.TextView;
@@ -25,6 +31,8 @@
2531

2632
public class SettingsActivity extends SilentActivity implements View.OnClickListener {
2733

34+
private static final int PERMISSION_REQUEST_NOTIFICATION_POLICY_ACCESS_SETTING = 200;
35+
2836
private View mNotifyCourseView, mNotifyBusView, mHeadPhotoView, mAppVersionView, mFeedbackView,
2937
mDonateView, mVibrateCourseView;
3038
private SwitchCompat mNotifyCourseSwitch, mNotifyBusSwitch, mHeadPhotoSwitch,
@@ -93,6 +101,12 @@ private void restorePreference() {
93101
mHeadPhotoSwitch.setChecked(Memory.getBoolean(this, Constant.PREF_HEAD_PHOTO, true));
94102
mNotifyCourseSwitch.setChecked(Memory.getBoolean(this, Constant.PREF_COURSE_NOTIFY, false));
95103
mNotifyBusSwitch.setChecked(Memory.getBoolean(this, Constant.PREF_BUS_NOTIFY, false));
104+
NotificationManager notificationManager =
105+
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
106+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N &&
107+
!notificationManager.isNotificationPolicyAccessGranted()) {
108+
Memory.setBoolean(this, Constant.PREF_COURSE_VIBRATE, false);
109+
}
96110
mVibrateCourseSwitch
97111
.setChecked(Memory.getBoolean(this, Constant.PREF_COURSE_VIBRATE, false));
98112
}
@@ -259,6 +273,19 @@ public void onTokenExpired() {
259273
});
260274
}
261275

276+
@Override
277+
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
278+
super.onActivityResult(requestCode, resultCode, data);
279+
if (requestCode == PERMISSION_REQUEST_NOTIFICATION_POLICY_ACCESS_SETTING) {
280+
NotificationManager notificationManager =
281+
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
282+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N &&
283+
notificationManager.isNotificationPolicyAccessGranted()) {
284+
setUpCourseVibrate();
285+
}
286+
}
287+
}
288+
262289
private void setUpCourseVibrate() {
263290
mTracker.send(
264291
new HitBuilders.EventBuilder().setCategory("vibrate course").setAction("create")
@@ -272,6 +299,28 @@ private void setUpCourseVibrate() {
272299
return;
273300
}
274301

302+
NotificationManager notificationManager =
303+
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
304+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N &&
305+
!notificationManager.isNotificationPolicyAccessGranted()) {
306+
mVibrateCourseSwitch.setChecked(false);
307+
Memory.setBoolean(SettingsActivity.this, Constant.PREF_COURSE_VIBRATE, false);
308+
new AlertDialog.Builder(this).setMessage(R.string.course_vibrate_permission)
309+
.setPositiveButton(R.string.go_to_settings,
310+
new DialogInterface.OnClickListener() {
311+
312+
@TargetApi(Build.VERSION_CODES.N)
313+
@Override
314+
public void onClick(DialogInterface dialogInterface, int i) {
315+
Intent intent = new Intent(
316+
android.provider.Settings.ACTION_NOTIFICATION_POLICY_ACCESS_SETTINGS);
317+
startActivityForResult(intent,
318+
PERMISSION_REQUEST_NOTIFICATION_POLICY_ACCESS_SETTING);
319+
}
320+
}).setNegativeButton(R.string.skip, null).show();
321+
return;
322+
}
323+
275324
final Dialog progressDialog = Utils.createLoadingDialog(this, R.string.loading);
276325
progressDialog.show();
277326
Utils.setUpCourseNotify(this, new GeneralCallback() {

KUAS-AP-Material/app/src/main/java/silent/kuasapmaterial/libs/VibrateHelper.java

Lines changed: 27 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
import android.content.Intent;
88
import android.os.Bundle;
99

10+
import com.crashlytics.android.answers.Answers;
11+
import com.crashlytics.android.answers.CustomEvent;
1012
import com.kuas.ap.R;
1113

1214
import java.util.ArrayList;
@@ -21,7 +23,7 @@
2123

2224
public class VibrateHelper {
2325

24-
public static void setCourseVibrate(Context context, List<List<CourseModel>> courseModelList) {
26+
static void setCourseVibrate(Context context, List<List<CourseModel>> courseModelList) {
2527
if (courseModelList == null) {
2628
return;
2729
}
@@ -92,23 +94,30 @@ public static void setCourseVibrate(Context context) {
9294
List<CourseModel> courseModelList = Utils.loadCourseVibrate(context);
9395
if (courseModelList != null) {
9496
for (int i = 0; i < courseModelList.size(); i++) {
95-
CourseModel courseModel = courseModelList.get(i);
96-
if (!courseModel.start_time.contains(":") || !courseModel.end_time.contains(":")) {
97-
List<String> sectionList = new ArrayList<>(Arrays.asList(
98-
context.getResources().getStringArray(R.array.course_sections)));
99-
courseModel.start_time =
100-
context.getResources().getStringArray(R.array.start_time)[sectionList
101-
.indexOf(courseModel.section)];
102-
courseModel.end_time =
103-
context.getResources().getStringArray(R.array.end_time)[sectionList
104-
.indexOf(courseModel.section)];
105-
}
106-
if (i % 2 == 0) {
107-
setCourseAlarm(context, courseModel.start_time, courseModel.dayOfWeek,
108-
courseModel.notifyKey * 1000, true);
109-
} else {
110-
setCourseAlarm(context, courseModel.end_time, courseModel.dayOfWeek,
111-
courseModel.notifyKey * 10000, false);
97+
try {
98+
CourseModel courseModel = courseModelList.get(i);
99+
if (!courseModel.start_time.contains(":") ||
100+
!courseModel.end_time.contains(":")) {
101+
List<String> sectionList = new ArrayList<>(Arrays.asList(
102+
context.getResources().getStringArray(R.array.course_sections)));
103+
courseModel.start_time = context.getResources()
104+
.getStringArray(R.array.start_time)[sectionList
105+
.indexOf(courseModel.section)];
106+
courseModel.end_time =
107+
context.getResources().getStringArray(R.array.end_time)[sectionList
108+
.indexOf(courseModel.section)];
109+
}
110+
if (i % 2 == 0) {
111+
setCourseAlarm(context, courseModel.start_time, courseModel.dayOfWeek,
112+
courseModel.notifyKey * 1000, true);
113+
} else {
114+
setCourseAlarm(context, courseModel.end_time, courseModel.dayOfWeek,
115+
courseModel.notifyKey * 10000, false);
116+
}
117+
} catch (Exception e) {
118+
Answers.getInstance().logCustom(
119+
new CustomEvent("Gson").putCustomAttribute("Type", "Course Vibrate Set")
120+
.putCustomAttribute("Exception", e.getMessage()));
112121
}
113122
}
114123
}

KUAS-AP-Material/app/src/main/res/values-zh-rTW/strings.xml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<string name="app_name">高應校務通</string>
33

44
<string name="update_note_title">更新日誌 %s</string>
5-
<string name="update_note_content">更新:\n 105 學年度第 1 學期行事曆\n修正:\n 不會崩潰了不會崩潰了工程師很忙 der</string>
5+
<string name="update_note_content">更新:\n 105 學年度第 2 學期行事曆</string>
66

77
<string name="splash_content">我們全都包了\n只剩下學校不包我們</string>
88
<string name="share">分享</string>
@@ -88,10 +88,12 @@
8888
<string name="bus_notify_jiangong">建工</string>
8989
<string name="bus_notify_yanchao">燕巢</string>
9090
<string name="course_vibrate_hint">將於上課時轉為震動,下課時恢復!</string>
91+
<string name="course_vibrate_permission">需要「零打擾存取權」方能自動轉為震動。</string>
9192
<string name="course_notify_hint">將於上課前十分鐘提醒!</string>
9293
<string name="course_notify_content" formatted="false">親,%s 上課教室在 %s!</string>
9394
<string name="course_notify_unknown">外太空</string>
9495
<string name="calender_app_not_found">找不到支援的行事曆 Apps</string>
96+
<string name="go_to_settings">前往設定</string>
9597

9698
<string name="education_system">學制</string>
9799
<string name="department">科系</string>

KUAS-AP-Material/app/src/main/res/values/strings.xml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<string name="app_name">KUAS AP</string>
33

44
<string name="update_note_title">Update Notes %s</string>
5-
<string name="update_note_content">更新:\n 105 學年度第 1 學期行事曆\n修正:\n 不會崩潰了不會崩潰了工程師很忙 der</string>
5+
<string name="update_note_content">更新:\n 105 學年度第 2 學期行事曆</string>
66

77
<string name="splash_content">我們全都包了\n只剩下學校不包我們</string>
88
<string name="share">Share</string>
@@ -90,10 +90,12 @@
9090
<string name="bus_notify_jiangong">JianGong</string>
9191
<string name="bus_notify_yanchao">YanChao</string>
9292
<string name="course_vibrate_hint">Will turn on silent mode during class, turn back to normal mode after class!</string>
93+
<string name="course_vibrate_permission">Need "Do Not Disturb access" to auto mute.</string>
9394
<string name="course_notify_hint">Reminder will pop up 10mins before class starts!</string>
9495
<string name="course_notify_content" formatted="false">Class %s will be at room %s!</string>
9596
<string name="course_notify_unknown">Outerspace~</string>
9697
<string name="calender_app_not_found">Can\'t found any calender apps.</string>
98+
<string name="go_to_settings">Settings</string>
9799

98100
<string name="education_system">Scheme</string>
99101
<string name="department">Department</string>

0 commit comments

Comments
 (0)