Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 40e2e2b

Browse files
committed
foundation for notification and themes
1 parent 2278593 commit 40e2e2b

20 files changed

Lines changed: 763 additions & 111 deletions

app/build.gradle

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,9 @@ android {
1717

1818
buildTypes {
1919
release {
20-
minifyEnabled false
20+
minifyEnabled true
21+
shrinkResources true
22+
zipAlignEnabled true
2123
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
2224
}
2325
}
@@ -34,6 +36,7 @@ dependencies {
3436
implementation 'com.google.android.material:material:1.5.0'
3537
implementation 'androidx.constraintlayout:constraintlayout:2.1.3'
3638
implementation 'androidx.gridlayout:gridlayout:1.0.0'
39+
implementation 'androidx.preference:preference:1.2.0'
3740

3841
//coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.5'
3942

app/src/main/AndroidManifest.xml

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,27 +3,34 @@
33
package="io.github.subhamtyagi.quickcalculation">
44

55
<uses-permission android:name="android.permission.VIBRATE" />
6+
67
<application
78
android:allowBackup="true"
89
android:icon="@mipmap/ic_launcher"
910
android:label="@string/app_name"
1011
android:roundIcon="@mipmap/ic_launcher_round"
1112
android:supportsRtl="true"
12-
android:theme="@style/Theme.QuickCalculation">
13-
<activity android:name=".QuizActivity"
14-
android:theme="@style/Theme.QuickCalculation"
15-
android:exported="true"/>
13+
android:theme="@style/Theme.quick_calculation">
14+
<activity
15+
android:name=".SettingsActivity"
16+
android:exported="false"
17+
android:label="@string/title_activity_settings" />
18+
19+
<activity
20+
android:name=".QuizActivity"
21+
android:exported="false" />
1622
<activity
1723
android:name=".LaunchActivity"
18-
android:label="@string/app_name"
1924
android:exported="true"
20-
android:theme="@style/Theme.QuickCalculation">
25+
android:label="@string/app_name">
2126
<intent-filter>
2227
<action android:name="android.intent.action.MAIN" />
2328

2429
<category android:name="android.intent.category.LAUNCHER" />
2530
</intent-filter>
2631
</activity>
32+
33+
<receiver android:name=".LaunchActivity$AlarmReceiver" />
2734
</application>
2835

2936
</manifest>

app/src/main/java/io/github/subhamtyagi/quickcalculation/LaunchActivity.java

Lines changed: 73 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
package io.github.subhamtyagi.quickcalculation;
22

3+
import android.app.AlarmManager;
4+
import android.app.PendingIntent;
5+
import android.content.BroadcastReceiver;
6+
import android.content.Context;
37
import android.content.Intent;
8+
import android.os.Build;
49
import android.os.Bundle;
510
import android.view.Menu;
611
import android.view.MenuItem;
@@ -11,24 +16,32 @@
1116
import android.widget.Spinner;
1217
import android.widget.Toast;
1318

19+
import androidx.annotation.RequiresApi;
1420
import androidx.appcompat.app.AppCompatActivity;
1521

16-
import io.github.subhamtyagi.quickcalculation.utils.Constants;
22+
import java.util.Calendar;
23+
1724
import io.github.subhamtyagi.quickcalculation.utils.CrashUtils;
25+
import io.github.subhamtyagi.quickcalculation.utils.SpUtil;
26+
import io.github.subhamtyagi.quickcalculation.utils.Utils;
1827

1928

2029
public class LaunchActivity extends AppCompatActivity {
2130

31+
AlarmManager manager;
32+
PendingIntent pendingIntent;
2233
private Spinner operationsSpinner, timerSpinner;
2334
private String operationName = "multiply", timer = "30";
2435
private EditText lower1, lower2, upper1, upper2;
2536

2637
@Override
2738
protected void onCreate(Bundle savedInstanceState) {
2839
super.onCreate(savedInstanceState);
29-
setContentView(R.layout.activity_launch);
30-
3140
new CrashUtils(getApplicationContext(), "");
41+
SpUtil.getInstance().init(this);
42+
/*setTheme(Utils.getTheme(this));*/
43+
44+
setContentView(R.layout.activity_launch);
3245

3346
operationsSpinner = findViewById(R.id.spinner_operator);
3447
timerSpinner = findViewById(R.id.spinner_timer);
@@ -93,8 +106,8 @@ public void onNothingSelected(AdapterView<?> adapterView) {
93106

94107
findViewById(R.id.btn_start).setOnClickListener(view -> {
95108
Intent i = new Intent(this, QuizActivity.class);
96-
i.putExtra(Constants.OPERATIONS, operationName);
97-
i.putExtra(Constants.TIME, timer);
109+
i.putExtra(Utils.OPERATIONS, operationName);
110+
i.putExtra(Utils.TIME, timer);
98111
String l1 = getValueOf(lower1),
99112
l2 = getValueOf(lower2),
100113
u2 = getValueOf(upper2),
@@ -115,24 +128,51 @@ public void onNothingSelected(AdapterView<?> adapterView) {
115128
int iU2 = Integer.parseInt(u2);
116129
if (iU2 >= iL2) {
117130
if (iU1 >= iL1) {
118-
i.putExtra(Constants.LOWER_1, iL1);
119-
i.putExtra(Constants.LOWER_2, iL2);
120-
i.putExtra(Constants.UPPER_2, iU2);
121-
i.putExtra(Constants.UPPER_1, iU1);
131+
i.putExtra(Utils.LOWER_1, iL1);
132+
i.putExtra(Utils.LOWER_2, iL2);
133+
i.putExtra(Utils.UPPER_2, iU2);
134+
i.putExtra(Utils.UPPER_1, iU1);
122135
startActivity(i);
123136
overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
124137
} else {
125138
upper1.requestFocus();
126139
Toast.makeText(this, getResources().getString(R.string.upper_value_must_be_greater), Toast.LENGTH_SHORT).show();
127140
}
128-
}else{
141+
} else {
129142
upper2.requestFocus();
130143
Toast.makeText(this, getResources().getString(R.string.upper_value_must_be_greater), Toast.LENGTH_SHORT).show();
131144
}
132145
}
133146
});
134147

148+
}
149+
150+
@RequiresApi(api = Build.VERSION_CODES.M)
151+
private void setNotificationIfAny() {
152+
boolean isNotificationEnable = SpUtil.getInstance().getBoolean(getString(R.string.pf_notification_switch), false);
153+
Intent alarmIntent = new Intent(this, AlarmReceiver.class);
154+
if (pendingIntent != null && manager != null) {
155+
manager.cancel(pendingIntent);
156+
} else {
157+
pendingIntent = PendingIntent.getBroadcast(this, 0, alarmIntent, 0);
158+
manager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
159+
}
135160

161+
if (isNotificationEnable) {
162+
Calendar calendar = Calendar.getInstance();
163+
calendar.setTimeInMillis(System.currentTimeMillis());
164+
int hour = SpUtil.getInstance().getInt(getString(R.string.key_notification_hours), 8);
165+
int min = SpUtil.getInstance().getInt(getString(R.string.key_notification_minutes), 0);
166+
calendar.set(Calendar.HOUR_OF_DAY, hour);
167+
calendar.set(Calendar.MINUTE, min);
168+
calendar.set(Calendar.SECOND, 1);
169+
manager.setRepeating(AlarmManager.RTC_WAKEUP,
170+
calendar.getTimeInMillis(),
171+
AlarmManager.INTERVAL_DAY, pendingIntent);
172+
173+
} else {
174+
manager.cancel(pendingIntent);
175+
}
136176
}
137177

138178
public void setAdapters() {
@@ -162,8 +202,31 @@ public boolean onCreateOptionsMenu(Menu menu) {
162202
public boolean onOptionsItemSelected(MenuItem item) {
163203
int id = item.getItemId();
164204
if (id == R.id.action_settings) {
205+
SpUtil.getInstance().putBoolean(getString(R.string.is_theme_changed), false);
206+
startActivity(new Intent(this, SettingsActivity.class));
165207
return true;
166208
}
167209
return super.onOptionsItemSelected(item);
168210
}
211+
212+
@Override
213+
protected void onResume() {
214+
super.onResume();
215+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
216+
setNotificationIfAny();
217+
}
218+
219+
/* if (SpUtil.getInstance().getBoolean(getString(R.string.is_theme_changed),false)){
220+
SpUtil.getInstance().putBoolean(getString(R.string.is_theme_changed),false);
221+
recreate();
222+
}*/
223+
}
224+
225+
public static class AlarmReceiver extends BroadcastReceiver {
226+
@Override
227+
public void onReceive(Context context, Intent intent) {
228+
// send notification
229+
//
230+
}
231+
}
169232
}

app/src/main/java/io/github/subhamtyagi/quickcalculation/QuizActivity.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
import io.github.subhamtyagi.quickcalculation.factory.GenerateQuestion;
1818
import io.github.subhamtyagi.quickcalculation.factory.Question;
19-
import io.github.subhamtyagi.quickcalculation.utils.Constants;
19+
import io.github.subhamtyagi.quickcalculation.utils.Utils;
2020

2121
public class QuizActivity extends AppCompatActivity {
2222

@@ -83,15 +83,15 @@ protected void onCreate(Bundle savedInstanceState) {
8383
mReportCardView.setVisibility(View.INVISIBLE);
8484

8585
Intent get = getIntent();
86-
operation = get.getStringExtra(Constants.OPERATIONS);
86+
operation = get.getStringExtra(Utils.OPERATIONS);
8787
if (operation.equals("simplification")) {
8888
mQuestionTextView.setTextSize(22);
8989
}
90-
timer = get.getStringExtra(Constants.TIME);
91-
mLowerRange1 = get.getIntExtra(Constants.LOWER_1, 11);
92-
mLowerRange2 = get.getIntExtra(Constants.LOWER_2, 11);
93-
mUpperRange2 = get.getIntExtra(Constants.UPPER_2, 99);
94-
mUpperRange1 = get.getIntExtra(Constants.UPPER_1, 99);
90+
timer = get.getStringExtra(Utils.TIME);
91+
mLowerRange1 = get.getIntExtra(Utils.LOWER_1, 11);
92+
mLowerRange2 = get.getIntExtra(Utils.LOWER_2, 11);
93+
mUpperRange2 = get.getIntExtra(Utils.UPPER_2, 99);
94+
mUpperRange1 = get.getIntExtra(Utils.UPPER_1, 99);
9595

9696
play(mPlayAgainButton);
9797
}
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
package io.github.subhamtyagi.quickcalculation;
2+
3+
import android.os.Build;
4+
import android.os.Bundle;
5+
6+
import androidx.appcompat.app.ActionBar;
7+
import androidx.appcompat.app.AppCompatActivity;
8+
import androidx.preference.Preference;
9+
import androidx.preference.PreferenceFragmentCompat;
10+
import androidx.preference.SwitchPreferenceCompat;
11+
12+
import io.github.subhamtyagi.quickcalculation.dialog.TimeDialog;
13+
import io.github.subhamtyagi.quickcalculation.utils.SpUtil;
14+
15+
public class SettingsActivity extends AppCompatActivity {
16+
17+
@Override
18+
protected void onCreate(Bundle savedInstanceState) {
19+
super.onCreate(savedInstanceState);
20+
SpUtil.getInstance().init(this);
21+
/* setTheme(Utils.getTheme(this));*/
22+
setContentView(R.layout.settings_activity);
23+
if (savedInstanceState == null) {
24+
getSupportFragmentManager()
25+
.beginTransaction()
26+
.replace(R.id.settings, new SettingsFragment())
27+
.commit();
28+
}
29+
ActionBar actionBar = getSupportActionBar();
30+
if (actionBar != null) {
31+
actionBar.setDisplayHomeAsUpEnabled(true);
32+
}
33+
34+
35+
}
36+
37+
38+
public static class SettingsFragment extends PreferenceFragmentCompat {
39+
40+
@Override
41+
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
42+
setPreferencesFromResource(R.xml.settings, rootKey);
43+
/*ListPreference theme = findPreference(getString(R.string.pf_theme));*/
44+
SwitchPreferenceCompat notification = findPreference(getString(R.string.pf_notification_switch));
45+
Preference time = findPreference(getString(R.string.pf_notification_time));
46+
47+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
48+
assert notification != null;
49+
notification.setOnPreferenceChangeListener((preference, newValue) -> {
50+
boolean b = (boolean) newValue;
51+
assert time != null;
52+
time.setVisible(b);
53+
if (b) {
54+
String msg = SpUtil.getInstance().getInt(getContext().getString(R.string.key_notification_hours)) + ":"
55+
+ SpUtil.getInstance().getInt(getContext().getString(R.string.key_notification_minutes));
56+
time.setSummary(msg);
57+
}
58+
return true;
59+
});
60+
61+
assert time != null;
62+
time.setOnPreferenceClickListener(preference -> {
63+
new TimeDialog(getContext()).show();
64+
return true;
65+
});
66+
} else {
67+
notification.setVisible(false);
68+
time.setVisible(false);
69+
}
70+
71+
/* assert theme != null;
72+
theme.setOnPreferenceChangeListener((preference, newValue) -> {
73+
theme.setSummary((String) newValue);
74+
SpUtil.getInstance().putBoolean(getContext().getString(R.string.is_theme_changed),true);
75+
return true;
76+
});*/
77+
}
78+
}
79+
80+
}

0 commit comments

Comments
 (0)