First Time now Kotlin, I'm wondering why I do this

This commit is contained in:
Deniz Düzgören
2019-05-24 19:22:23 +02:00
parent 7bbc6eee62
commit 0c043683f9
4 changed files with 158 additions and 218 deletions
+7 -5
View File
@@ -15,11 +15,6 @@
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
tools:ignore="GoogleAppIndexingWarning">
<activity
android:name=".FirstTime"
android:label="First Time"
android:screenOrientation="portrait"
android:theme="@style/AppTheme0.Launcher" />
<activity
android:name=".MainActivity"
android:label="@string/app_name"
@@ -27,6 +22,13 @@
android:theme="@style/AppTheme0.Launcher"
android:windowSoftInputMode="adjustPan"/>
<activity
android:name=".FirstTime"
android:label="First Time"
android:screenOrientation="portrait"
android:theme="@style/AppTheme0.Launcher"
android:windowSoftInputMode="adjustPan"/>
<activity
android:name=".Main"
android:label="@string/app_name"
@@ -1,205 +0,0 @@
package com.denizd.substitutionplan;
import android.animation.Animator;
import android.app.ActivityManager;
import android.app.AlertDialog;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.Animatable;
import android.os.Build;
import android.os.Handler;
import android.preference.PreferenceManager;
import androidx.appcompat.app.AppCompatActivity;
import androidx.coordinatorlayout.widget.CoordinatorLayout;
import androidx.core.content.ContextCompat;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewAnimationUtils;
import android.view.Window;
import android.view.WindowManager;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton;
import java.util.Calendar;
public class FirstTime extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_first_time);
setTheme(R.style.AppTheme0);
Window window = this.getWindow();
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
window.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION, WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
window.setStatusBarColor(ContextCompat.getColor(this, R.color.background));
window.setNavigationBarColor(ContextCompat.getColor(this, R.color.background));
} else {
window.setStatusBarColor(ContextCompat.getColor(this, R.color.background));
window.setNavigationBarColor(ContextCompat.getColor(this, R.color.background));
}
window.setBackgroundDrawable(getDrawable(R.drawable.white));
Bitmap bm = BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher);
ActivityManager.TaskDescription taskDesc = new ActivityManager.TaskDescription(getString(R.string.app_name), bm, ContextCompat.getColor(this, R.color.background));
setTaskDescription(taskDesc);
final Context context = this;
final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
final SharedPreferences.Editor edit = prefs.edit();
final ExtendedFloatingActionButton fab = findViewById(R.id.efab);
final Intent start = new Intent(this, MainActivity.class);
final EditText name = findViewById(R.id.txtName);
final EditText grade = findViewById(R.id.txtClasses);
final EditText courses = findViewById(R.id.txtCourses);
final CheckBox notif = findViewById(R.id.cbNotif);
final CheckBox dark = findViewById(R.id.cbDark);
final CheckBox pers = findViewById(R.id.cbPersonalised);
final ImageButton helpClasses = findViewById(R.id.chipHelpClasses);
final ImageButton helpCourses = findViewById(R.id.chipHelpCourses);
helpCourses.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
AlertDialog.Builder alertDialog;
alertDialog = new AlertDialog.Builder(context, R.style.AlertDialogCustomLight);
View dialogView = LayoutInflater.from(context).inflate(R.layout.simple_dialog, null);
TextView title = dialogView.findViewById(R.id.textviewtitle);
title.setText(R.string.helpCoursesTitle);
TextView dialogText = dialogView.findViewById(R.id.dialogtext);
dialogText.setText(getString(R.string.helpCourses));
alertDialog.setView(dialogView);
alertDialog.show();
}
});
helpClasses.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
AlertDialog.Builder alertDialog;
alertDialog = new AlertDialog.Builder(context, R.style.AlertDialogCustomLight);
View dialogView = LayoutInflater.from(context).inflate(R.layout.simple_dialog, null);
TextView title = dialogView.findViewById(R.id.textviewtitle);
title.setText(R.string.helpClassesTitle);
TextView dialogText = dialogView.findViewById(R.id.dialogtext);
dialogText.setText(getString(R.string.helpClasses));
alertDialog.setView(dialogView);
alertDialog.show();
}
});
final LayoutInflater inflater = (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
fab.setClickable(false);
edit.putString("firstTimeDev", String.valueOf(Calendar.getInstance().getTime()));
edit.putString("username", name.getText().toString());
edit.putString("classes", grade.getText().toString());
edit.putString("courses", courses.getText().toString());
if (dark.isChecked()) {
edit.putInt("themeInt", 1);
} else {
edit.putInt("themeInt", 0);
}
if (notif.isChecked()) {
edit.putBoolean("notif", true);
} else {
edit.putBoolean("notif", false);
}
if (pers.isChecked()) {
edit.putBoolean("defaultPersonalised", true);
} else {
edit.putBoolean("defaultPersonalised", false);
}
edit.putBoolean("firstTime", false);
edit.apply();
final CoordinatorLayout cLayout = findViewById(R.id.coordinatorLayout);
final LinearLayout linearInflation = findViewById(R.id.linearInflation);
int x = fab.getRight() - fab.getWidth() / 2;
int y = fab.getBottom() - fab.getHeight() / 2;
int startRadius = 0;
int endRadius = (int) Math.hypot(cLayout.getWidth(), cLayout.getHeight());
inflater.inflate(R.layout.welcome_screen, linearInflation, true);
Animator anim = ViewAnimationUtils.createCircularReveal(linearInflation, x, y, startRadius, endRadius);
anim.setDuration(600);
final LinearLayout colour = findViewById(R.id.colourLayout);
linearInflation.setVisibility(View.VISIBLE);
anim.start();
final Animation animationOut = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.fade_out_short);
final Handler handlerZero = new Handler();
handlerZero.postDelayed(new Runnable() {
@Override
public void run() {
colour.startAnimation(animationOut);
}
}, 400);
animationOut.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {}
@Override
public void onAnimationEnd(Animation animation) {
colour.setVisibility(View.GONE);
}
@Override
public void onAnimationRepeat(Animation animation) {}
});
final Handler handlerOne = new Handler();
handlerOne.postDelayed(new Runnable() {
@Override
public void run() {
ImageView mImgCheck = findViewById(R.id.imageView);
((Animatable) mImgCheck.getDrawable()).start();
}
}, 1000);
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
startActivity(start);
finish();
}
}, 2000);
}
});
}
}
@@ -0,0 +1,144 @@
package com.denizd.substitutionplan
import android.app.ActivityManager
import android.content.Context
import android.content.Intent
import android.content.SharedPreferences
import android.graphics.BitmapFactory
import android.graphics.drawable.Animatable
import android.graphics.drawable.AnimatedVectorDrawable
import android.graphics.drawable.AnimationDrawable
import android.os.Build
import android.os.Bundle
import android.os.Handler
import android.preference.PreferenceManager
import android.view.LayoutInflater
import android.view.View
import android.view.ViewAnimationUtils
import android.view.WindowManager
import android.view.animation.Animation
import android.view.animation.AnimationUtils
import android.widget.*
import androidx.appcompat.app.AlertDialog
import androidx.appcompat.app.AppCompatActivity
import androidx.coordinatorlayout.widget.CoordinatorLayout
import androidx.core.content.ContextCompat
import com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton
import java.util.*
class FirstTime : AppCompatActivity(R.layout.activity_first_time) {
lateinit var context: Context
lateinit var prefs: SharedPreferences
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val window = this.window
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS)
window.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION, WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
window.navigationBarColor = ContextCompat.getColor(this, R.color.background)
}
val bm = BitmapFactory.decodeResource(resources, R.mipmap.ic_launcher)
val taskDesc = ActivityManager.TaskDescription(getString(R.string.app_name), bm, ContextCompat.getColor(this, R.color.background))
setTaskDescription(taskDesc)
context = this
prefs = PreferenceManager.getDefaultSharedPreferences(context) as SharedPreferences
val edit = prefs.edit()
val fab = findViewById<ExtendedFloatingActionButton>(R.id.efab)
val start = Intent(this, Main::class.java)
val name = findViewById<EditText>(R.id.txtName)
val grade = findViewById<EditText>(R.id.txtClasses)
val courses = findViewById<EditText>(R.id.txtCourses)
val notif = findViewById<CheckBox>(R.id.cbNotif)
val dark = findViewById<CheckBox>(R.id.cbDark)
val pers = findViewById<CheckBox>(R.id.cbPersonalised)
val helpClasses = findViewById<ImageButton>(R.id.chipHelpClasses)
val helpCourses = findViewById<ImageButton>(R.id.chipHelpCourses)
helpClasses.setOnClickListener {
createDialog(getString(R.string.helpClassesTitle), getString(R.string.helpClasses))
}
helpCourses.setOnClickListener {
createDialog(getString(R.string.helpCoursesTitle), getString(R.string.helpCourses))
}
val inflater = this.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater
fab.setOnClickListener {
fab.isClickable = false
edit.putString("firstTimeDev", Calendar.getInstance().time.toString())
.putString("username", name.text.toString())
.putString("classes", grade.text.toString())
.putString("courses", courses.text.toString())
if (dark.isChecked) {
edit.putInt("themeInt", 1)
} else {
edit.putInt("themeInt", 0)
}
edit.putBoolean("notif", notif.isChecked)
.putBoolean("defaultPersonalised", pers.isChecked)
.putBoolean("firstTime", false)
.apply()
val cLayout = findViewById<CoordinatorLayout>(R.id.coordinatorLayout)
val linearInflation = findViewById<LinearLayout>(R.id.linearInflation)
val x: Int = fab.right - fab.width / 2
val y: Int = fab.bottom- fab.height / 2
val endRadius = Math.hypot(cLayout.width.toDouble(), cLayout.height.toDouble()).toInt()
inflater.inflate(R.layout.welcome_screen, linearInflation, true)
val anim = ViewAnimationUtils.createCircularReveal(linearInflation, x, y, 0F, endRadius.toFloat())
val handler = Handler()
val animOut = AnimationUtils.loadAnimation(context, R.anim.fade_out_short)
anim.duration = 600
val colour = findViewById<LinearLayout>(R.id.colourLayout)
linearInflation.visibility = View.VISIBLE
anim.start()
handler.postDelayed({
colour.startAnimation(animOut)
}, 400)
animOut.setAnimationListener(object: Animation.AnimationListener {
override fun onAnimationStart(arg0: Animation) {}
override fun onAnimationRepeat(arg0: Animation) {}
override fun onAnimationEnd(arg0: Animation) {
colour.visibility = View.GONE
}
})
handler.postDelayed({
val mImgCheck = findViewById<ImageView>(R.id.imageView).drawable as AnimatedVectorDrawable
mImgCheck.start()
}, 1000)
handler.postDelayed({
startActivity(start)
finish()
}, 2000)
}
}
private fun createDialog(title: String, text: String) {
val alertDialog = if (prefs.getInt("themeInt", 0) == 1) {
AlertDialog.Builder(context, R.style.AlertDialogCustomDark)
} else {
AlertDialog.Builder(context, R.style.AlertDialogCustomLight)
}
val dialogView = LayoutInflater.from(context).inflate(R.layout.simple_dialog, null)
val dialogTitle = dialogView.findViewById<TextView>(R.id.textviewtitle)
val dialogText = dialogView.findViewById<TextView>(R.id.dialogtext)
dialogTitle.text = title
dialogText.text = text
alertDialog.setView(dialogView).show()
}
}
@@ -38,7 +38,7 @@ class SettingsFragment : Fragment(R.layout.content_settings), View.OnClickListen
private val builder = CustomTabsIntent.Builder()
private val customTabsIntent = builder.build() as CustomTabsIntent
private var cs: Int = 7
var window: Window? = null
private var window: Window? = null
override fun onAttach(context: Context) {
super.onAttach(context)
@@ -46,7 +46,7 @@ class SettingsFragment : Fragment(R.layout.content_settings), View.OnClickListen
prefs = PreferenceManager.getDefaultSharedPreferences(mContext)
edit = prefs.edit()
window = activity?.window
window = activity?.window
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
@@ -131,6 +131,7 @@ class SettingsFragment : Fragment(R.layout.content_settings), View.OnClickListen
})
btnVersion.setOnLongClickListener {
Toast.makeText(mContext, getString(R.string.devby), Toast.LENGTH_LONG).show()
debugMenu()
}
}
@@ -244,7 +245,6 @@ class SettingsFragment : Fragment(R.layout.content_settings), View.OnClickListen
R.id.btnVersion -> {
if (cs > 0) {
cs--
Toast.makeText(mContext, getString(R.string.devby), Toast.LENGTH_LONG).show()
} else {
try {
cs = 7
@@ -467,6 +467,10 @@ class SettingsFragment : Fragment(R.layout.content_settings), View.OnClickListen
edit.putString("time", "").apply()
Toast.makeText(mContext, "Notification time cleared", Toast.LENGTH_LONG).show()
} // TODO add option to clear database
"@FIRSTTIME" -> {
edit.putBoolean("firstTime", true).apply()
Toast.makeText(mContext, "First time flag cleared", Toast.LENGTH_LONG).show()
}
else -> Toast.makeText(mContext, getString(R.string.nothinghappened), Toast.LENGTH_LONG).show()
}
}
@@ -475,11 +479,6 @@ class SettingsFragment : Fragment(R.layout.content_settings), View.OnClickListen
return true
}
// override fun onDetach() {
// super.onDetach()
// edit.apply()
// }
private fun getDiagnosticsText(prefs: SharedPreferences): String {
return "First Launch: " + prefs.getString("firstTimeDev", "") +
"\n\nApp launched: " + prefs.getInt("launchDev", 0) +