Initial Push

This commit is contained in:
Deniz Düzgören
2019-04-29 19:27:51 +02:00
commit a45e5cdfa0
148 changed files with 6890 additions and 0 deletions
+13
View File
@@ -0,0 +1,13 @@
*.iml
.gradle
/local.properties
/.idea/caches
/.idea/libraries
/.idea/modules.xml
/.idea/workspace.xml
/.idea/navEditor.xml
/.idea/assetWizardSettings.xml
.DS_Store
/build
/captures
.externalNativeBuild
+29
View File
@@ -0,0 +1,29 @@
<component name="ProjectCodeStyleConfiguration">
<code_scheme name="Project" version="173">
<Objective-C-extensions>
<file>
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Import" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Macro" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Typedef" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Enum" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Constant" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Global" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Struct" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="FunctionPredecl" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Function" />
</file>
<class>
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Property" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Synthesize" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="InitMethod" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="StaticMethod" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="InstanceMethod" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="DeallocMethod" />
</class>
<extensions>
<pair source="cpp" header="h" fileNamingConvention="NONE" />
<pair source="c" header="h" fileNamingConvention="NONE" />
</extensions>
</Objective-C-extensions>
</code_scheme>
</component>
+18
View File
@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="GradleSettings">
<option name="linkedExternalProjectsSettings">
<GradleProjectSettings>
<option name="distributionType" value="DEFAULT_WRAPPED" />
<option name="externalProjectPath" value="$PROJECT_DIR$" />
<option name="modules">
<set>
<option value="$PROJECT_DIR$" />
<option value="$PROJECT_DIR$/app" />
</set>
</option>
<option name="resolveModulePerSourceSet" value="false" />
</GradleProjectSettings>
</option>
</component>
</project>
+9
View File
@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_7" project-jdk-name="1.8" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/build/classes" />
</component>
<component name="ProjectType">
<option name="id" value="Android" />
</component>
</project>
+12
View File
@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="RunConfigurationProducerService">
<option name="ignoredProducers">
<set>
<option value="org.jetbrains.plugins.gradle.execution.test.runner.AllInPackageGradleConfigurationProducer" />
<option value="org.jetbrains.plugins.gradle.execution.test.runner.TestClassGradleConfigurationProducer" />
<option value="org.jetbrains.plugins.gradle.execution.test.runner.TestMethodGradleConfigurationProducer" />
</set>
</option>
</component>
</project>
+1
View File
@@ -0,0 +1 @@
/build
+59
View File
@@ -0,0 +1,59 @@
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-android'
android {
// signingConfigs {
// release {
// keyAlias 'key0'
// keyPassword 'Cinemassacre'
// storeFile file('C:/Users/kduez/git/substKey.jks')
// storePassword 'Cinemassacre'
// }
// }
compileSdkVersion 28
defaultConfig {
applicationId "com.denizd.substitutionplan"
minSdkVersion 21
targetSdkVersion 28
versionCode 9
versionName "1.2.4"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
// signingConfig signingConfigs.release
}
}
}
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation 'androidx.appcompat:appcompat:1.1.0-alpha04'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test:runner:1.2.0-alpha03'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0-alpha03'
implementation 'org.jsoup:jsoup:1.11.3'
implementation 'androidx.cardview:cardview:1.0.0'
implementation 'androidx.recyclerview:recyclerview:1.1.0-alpha04'
implementation 'com.google.android.material:material:1.1.0-alpha05'
implementation 'com.android.support:customtabs:28.0.0'
implementation 'com.jaredrummler:android-device-names:1.1.8'
implementation 'com.github.mukeshsolanki:easypreferences:1.0.6'
def lifecycle_version = "2.0.0"
implementation "androidx.lifecycle:lifecycle-extensions:$lifecycle_version"
annotationProcessor "androidx.lifecycle:lifecycle-compiler:$lifecycle_version"
def room_version = "2.1.0-alpha04"
implementation "androidx.room:room-runtime:$room_version"
annotationProcessor "androidx.room:room-compiler:$room_version"
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
}
repositories {
mavenCentral()
}
+21
View File
@@ -0,0 +1,21 @@
# Add project specific ProGuard rules here.
# You can control the set of applied configuration files using the
# proguardFiles setting in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}
# Uncomment this to preserve the line number information for
# debugging stack traces.
#-keepattributes SourceFile,LineNumberTable
# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile
Binary file not shown.
@@ -0,0 +1,26 @@
package com.denizd.substitutionplan;
import android.content.Context;
import androidx.test.InstrumentationRegistry;
import androidx.test.runner.AndroidJUnit4;
import org.junit.Test;
import org.junit.runner.RunWith;
import static org.junit.Assert.*;
/**
* Instrumented test, which will execute on an Android device.
*
* @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
*/
@RunWith(AndroidJUnit4.class)
public class ExampleInstrumentedTest {
@Test
public void useAppContext() {
// Context of the app under test.
Context appContext = InstrumentationRegistry.getTargetContext();
assertEquals("com.denizd.substitutionplan", appContext.getPackageName());
}
}
+41
View File
@@ -0,0 +1,41 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.denizd.substitutionplan">
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme0"
tools:ignore="GoogleAppIndexingWarning">
<activity
android:name=".FirstTime"
android:label="First Time"
android:screenOrientation="portrait"
android:theme="@style/AppThemeLight.Launcher" />
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:screenOrientation="portrait"
android:theme="@style/AppThemeLight.Launcher">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<service
android:name=".ScheduledJobService"
android:permission="android.permission.BIND_JOB_SERVICE" />
</application>
</manifest>
Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

@@ -0,0 +1,73 @@
package com.denizd.substitutionplan;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.List;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
public class CardAdapter extends RecyclerView.Adapter<CardAdapter.CardViewHolder> {
private List<Subst> mSubst;
public static class CardViewHolder extends RecyclerView.ViewHolder {
public ImageView mImageView;
public TextView mGroup, mDate, mTime, mCourse, mRoom, mAdditional;
public CardViewHolder(@NonNull View itemView) {
super(itemView);
mImageView = itemView.findViewById(R.id.iconView);
mGroup = itemView.findViewById(R.id.group);
mDate = itemView.findViewById(R.id.date);
mTime = itemView.findViewById(R.id.time);
mCourse = itemView.findViewById(R.id.course);
mRoom = itemView.findViewById(R.id.room);
mAdditional = itemView.findViewById(R.id.additional);
}
}
public CardAdapter(ArrayList<Subst> subst) {
mSubst = subst;
}
@NonNull
@Override
public CardViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.course_card, parent, false);
CardViewHolder cvh = new CardViewHolder(v);
return cvh;
}
public Subst getSubstAt(int i) {
return mSubst.get(i);
}
@Override
public void onBindViewHolder(@NonNull CardViewHolder holder, int position) {
Subst currentItem = mSubst.get(position);
holder.mImageView.setImageResource(currentItem.getIcon());
holder.mGroup.setText(currentItem.getGroup());
holder.mDate.setText(currentItem.getDate());
holder.mTime.setText(currentItem.getTime());
holder.mCourse.setText(currentItem.getCourse());
holder.mRoom.setText(currentItem.getRoom());
holder.mAdditional.setText(currentItem.getAdditional());
}
@Override
public int getItemCount() {
return mSubst.size();
}
public void setSubst(List<Subst> subst) {
mSubst = subst;
notifyDataSetChanged();
}
}
@@ -0,0 +1,235 @@
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.content.res.Resources;
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.annotation.ColorInt;
import androidx.appcompat.app.AppCompatActivity;
import androidx.coordinatorlayout.widget.CoordinatorLayout;
import androidx.core.content.ContextCompat;
import android.os.Bundle;
import android.util.TypedValue;
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 com.jaredrummler.android.device.DeviceName;
import java.util.Calendar;
public class FirstTime extends AppCompatActivity {
private String manufacturer;
@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.white));
window.setNavigationBarColor(ContextCompat.getColor(this, R.color.white));
} else {
window.setStatusBarColor(ContextCompat.getColor(this, R.color.black));
window.setNavigationBarColor(ContextCompat.getColor(this, R.color.black));
}
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.white));
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);
// TODO Huawei
// DeviceName.with(context).request(new DeviceName.Callback() {
// @Override
// public void onFinished(DeviceName.DeviceInfo info, Exception error) {
// manufacturer = info.manufacturer;
// if (manufacturer.contains("Huawei") ||
// manufacturer.contains("Honor")) {
//// if (true) {
// notif.setEnabled(false);
//
// @ColorInt int color;
//
// TypedValue typedValue = new TypedValue();
// Resources.Theme theme = context.getTheme();
// theme.resolveAttribute(R.attr.colorHint, typedValue, true);
// color = typedValue.data;
//
// notif.setTextColor(color);
// edit.putBoolean("notif", false);
// edit.putBoolean("autoRefresh", true);
// edit.apply();
// }
// }
// });
helpCourses.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
AlertDialog.Builder alertDialog;
alertDialog = new AlertDialog.Builder(context, R.style.AlertDialogCustomLight);
alertDialog.setTitle(getString(R.string.helpCoursesTitle));
View dialogView = LayoutInflater.from(context).inflate(R.layout.simple_dialog, null);
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);
alertDialog.setTitle(getString(R.string.helpClassesTitle));
View dialogView = LayoutInflater.from(context).inflate(R.layout.simple_dialog, null);
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,17 @@
package com.denizd.substitutionplan;
import androidx.room.Entity;
import androidx.room.PrimaryKey;
public class Food {
private String food;
public Food(String food) {
this.food = food;
}
public String getFood() {
return food;
}
}
@@ -0,0 +1,59 @@
package com.denizd.substitutionplan;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.List;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
public class FoodAdapter extends RecyclerView.Adapter<FoodAdapter.CardViewHolder> {
private List<Food> mFood;
public static class CardViewHolder extends RecyclerView.ViewHolder {
public TextView mFood;
public CardViewHolder(@NonNull View itemView) {
super(itemView);
mFood = itemView.findViewById(R.id.cardInfoText);
}
}
public FoodAdapter(ArrayList<Food> food) {
mFood = food;
}
@NonNull
@Override
public CardViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.just_a_card, parent, false);
CardViewHolder cvh = new CardViewHolder(v);
return cvh;
}
public Food getFoodAt(int i) {
return mFood.get(i);
}
@Override
public void onBindViewHolder(@NonNull CardViewHolder holder, int position) {
Food currentItem = mFood.get(position);
holder.mFood.setText(currentItem.getFood());
}
@Override
public int getItemCount() {
return mFood.size();
}
public void setFood(List<Food> food) {
mFood = food;
notifyDataSetChanged();
}
}
@@ -0,0 +1,4 @@
package com.denizd.substitutionplan
class FoodFragment {
}
@@ -0,0 +1,254 @@
package com.denizd.substitutionplan;
import android.content.SharedPreferences;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.preference.PreferenceManager;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.google.android.material.snackbar.Snackbar;
import com.madapps.prefrences.EasyPrefrences;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.view.animation.LayoutAnimationController;
import android.widget.ProgressBar;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.io.IOException;
import java.util.ArrayList;
import static android.content.Context.LAYOUT_INFLATER_SERVICE;
import static com.google.android.material.snackbar.Snackbar.make;
public class FragmentFood extends Fragment {
private RecyclerView recyclerView;
private FoodAdapter mAdapter;
private RecyclerView.LayoutManager layoutManager;
private ArrayList<Food> foodArrayList;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.food_layout, null);
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
final SwipeRefreshLayout pullToRefresh = getView().findViewById(R.id.pullToRefreshFood);
final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity());
final SharedPreferences.Editor edit = prefs.edit();
final LayoutAnimationController animationIn = AnimationUtils.loadLayoutAnimation(getActivity(), R.anim.layout_animation_fall_down);
final LayoutInflater inflater = (LayoutInflater) getActivity().getSystemService(LAYOUT_INFLATER_SERVICE);
EasyPrefrences easyPrefs = new EasyPrefrences(getContext());
ArrayList<String> foodListPopulation = new ArrayList<>(easyPrefs.getListString("foodListPrefs"));
try {
foodArrayList = new ArrayList<>();
recyclerView = getView().findViewById(R.id.linear_food);
layoutManager = new LinearLayoutManager(getContext());
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(layoutManager);
mAdapter = new FoodAdapter(foodArrayList);
recyclerView.setAdapter(mAdapter);
// try {
// recyclerView.removeAllViews();
// } catch (NullPointerException e) {
//
// }
for (int i = 0; i < foodListPopulation.size(); i++) {
foodArrayList.add(new Food(foodListPopulation.get(i)));
mAdapter.setFood(foodArrayList);
recyclerView.scheduleLayoutAnimation();
}
} catch (NullPointerException e) {
}
if (prefs.getBoolean("autoRefresh", false)) {
pullToRefresh.setRefreshing(true);
new fetcher().execute();
}
pullToRefresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
pullToRefresh.setRefreshing(true);
new fetcher().execute();
}
});
}
private class fetcher extends AsyncTask<Void, Void, Void> {
boolean attempt = false, npe = false;
Elements foodElements;
Document docFood;
final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity());
final SharedPreferences.Editor edit = prefs.edit();
final SwipeRefreshLayout pullToRefresh = getView().findViewById(R.id.pullToRefreshFood);
protected fetcher() {
}
@Override
protected Void doInBackground(Void... params) {
final ProgressBar progressBar = getView().getRootView().findViewById(R.id.progressBar);
try {
docFood = Jsoup.connect("https://djd4rkn355.github.io/food.html").get();
foodElements = docFood.select("th");
attempt = true;
progressBar.setProgress(0);
progressBar.setMax(foodElements.size());
// progressBar.incrementProgressBy(paragraphs[0].size());
} catch (IOException e1) {
npe = true;
} catch (NullPointerException e1) {
npe = true;
}
return null;
}
@Override
protected void onPostExecute(Void result) {
if (attempt) {
try {
final ProgressBar progressBar = getView().getRootView().findViewById(R.id.progressBar);
EasyPrefrences easyPrefs = new EasyPrefrences(getContext());
ArrayList<String> foodList = new ArrayList<>();
try {
recyclerView.removeAllViews();
foodArrayList.removeAll(foodArrayList);
} catch (NullPointerException e) {
}
for (int foodInt = 0; foodInt < foodElements.size(); foodInt++) {
try {
if (foodElements.get(foodInt).text().contains("Montag") ||
foodElements.get(foodInt).text().contains("Dienstag") ||
foodElements.get(foodInt).text().contains("Mittwoch") ||
foodElements.get(foodInt).text().contains("Donnerstag") ||
foodElements.get(foodInt).text().contains("Freitag")) {
if (foodElements.get(foodInt + 3).text().contains("Montag") ||
foodElements.get(foodInt + 3).text().contains("Dienstag") ||
foodElements.get(foodInt + 3).text().contains("Mittwoch") ||
foodElements.get(foodInt + 3).text().contains("Donnerstag") ||
foodElements.get(foodInt + 3).text().contains("Freitag") ||
foodElements.get(foodInt + 3).text().contains("von")) {
foodList.add(foodElements.get(foodInt).text() + "\n" + foodElements.get(foodInt + 1).text() + "\n" + foodElements.get(foodInt + 2).text());
foodInt += 2;
} else if (foodElements.get(foodInt + 2).text().contains("Montag") ||
foodElements.get(foodInt + 2).text().contains("Dienstag") ||
foodElements.get(foodInt + 2).text().contains("Mittwoch") ||
foodElements.get(foodInt + 2).text().contains("Donnerstag") ||
foodElements.get(foodInt + 2).text().contains("Freitag") ||
foodElements.get(foodInt + 2).text().contains("von")) {
foodList.add(foodElements.get(foodInt).text() + "\n" + foodElements.get(foodInt + 1).text());
foodInt += 1;
}
} else {
foodList.add(foodElements.get(foodInt).text());
}
} catch (IndexOutOfBoundsException e) {
try {
foodList.add(foodElements.get(foodInt).text() + "\n" + foodElements.get(foodInt + 1).text() + "\n" + foodElements.get(foodInt + 2).text());
break;
} catch (IndexOutOfBoundsException e1) {
foodList.add(foodElements.get(foodInt).text() + "\n" + foodElements.get(foodInt + 1).text());
break;
}
}
progressBar.incrementProgressBy(1);
}
easyPrefs.putListString("foodListPrefs", foodList);
ArrayList<String> foodListPopulation = new ArrayList<>(easyPrefs.getListString("foodListPrefs"));
final LayoutAnimationController animationIn = AnimationUtils.loadLayoutAnimation(getActivity(), R.anim.layout_animation_fall_down);
final LayoutInflater inflater = (LayoutInflater) getActivity().getSystemService(LAYOUT_INFLATER_SERVICE);
for (int i = 0; i < foodListPopulation.size(); i++) {
foodArrayList.add(new Food(foodListPopulation.get(i)));
mAdapter.setFood(foodArrayList);
recyclerView.scheduleLayoutAnimation();
progressBar.incrementProgressBy(1);
}
progressBar.setProgress(1000);
final Animation fadeOut = AnimationUtils.loadAnimation(getContext(), R.anim.fade_out);
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
progressBar.startAnimation(fadeOut);
}
}, 200);
fadeOut.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation arg0) {
}
@Override
public void onAnimationRepeat(Animation arg0) {
}
@Override
public void onAnimationEnd(Animation arg0) {
progressBar.setProgress(0);
}
});
try {
pullToRefresh.setRefreshing(false);
} catch (NullPointerException e) {
}
} catch (NullPointerException e) {
// pullToRefresh.setRefreshing(false);
}
} else if (npe) {
pullToRefresh.setRefreshing(false);
View contextView = getView().getRootView().findViewById(R.id.coordination);
Snackbar snackbar = make(contextView, getText(R.string.nointernet), Snackbar.LENGTH_LONG)
.setAction("Action", null);
snackbar.show();
}
}
}
}
@@ -0,0 +1,377 @@
package com.denizd.substitutionplan;
import android.content.Context;
import android.content.SharedPreferences;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.preference.PreferenceManager;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.google.android.material.snackbar.Snackbar;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProviders;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.LinearLayout;
import android.widget.ProgressBar;
import android.widget.TextView;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.io.IOException;
import java.net.URL;
import java.net.URLConnection;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.List;
import static android.content.Context.LAYOUT_INFLATER_SERVICE;
import static com.google.android.material.snackbar.Snackbar.make;
public class FragmentPersonal extends Fragment {
private RecyclerView recyclerView;
private CardAdapter mAdapter;
private RecyclerView.LayoutManager layoutManager;
private ArrayList<Subst> planCardList;
private TextView bottomSheetText;
private SubstViewModel substViewModel;
private boolean persPlanEmpty;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.plan, null);
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
final SwipeRefreshLayout pullToRefresh = getView().findViewById(R.id.pullToRefresh);
bottomSheetText = getView().getRootView().findViewById(R.id.bottom_sheet_text);
final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity());
final SharedPreferences.Editor edit = prefs.edit();
bottomSheetText.setText(prefs.getString("informational", getString(R.string.noinfo)));
planCardList = new ArrayList<>();
recyclerView = getView().findViewById(R.id.linearRecycler);
layoutManager = new LinearLayoutManager(getContext());
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(layoutManager);
mAdapter = new CardAdapter(planCardList);
recyclerView.setAdapter(mAdapter);
final TextView smileydown = getView().findViewById(R.id.smileydown);
final TextView smileydowntext = getView().findViewById(R.id.smileydowntext);
final LinearLayout linearsmiley = getView().findViewById(R.id.linearsmiley);
if (prefs.getInt("firstTimeOpening", 0) == 2) {
if (!prefs.getBoolean("notif", false)) {
pullToRefresh.setRefreshing(true);
new fetcher().execute();
edit.putInt("firstTimeOpening", 3);
edit.apply();
}
}
if (prefs.getBoolean("autoRefresh", false)) {
pullToRefresh.setRefreshing(true);
new fetcher().execute();
bottomSheetText.setText(prefs.getString("informational", getString(R.string.noinfo)));
}
substViewModel = ViewModelProviders.of(getActivity()).get(SubstViewModel.class);
substViewModel.getAllSubst().observe(this, new Observer<List<Subst>>() {
@Override
public void onChanged(List<Subst> substs) {
try {
if (planCardList != null) {
planCardList.clear();
}
smileydown.setVisibility(View.GONE);
smileydowntext.setVisibility(View.GONE);
linearsmiley.setVisibility(View.GONE);
persPlanEmpty = true;
recyclerView.setVisibility(View.VISIBLE);
for (int i = 0; i < substs.size(); i++) {
if (prefs.getString("courses", "").isEmpty() && !prefs.getString("classes", "").isEmpty()) {
if (!substs.get(i).getGroup().isEmpty() && !substs.get(i).getGroup().equals("")) {
if (prefs.getString("classes", "").contains(substs.get(i).getGroup()) || substs.get(i).getGroup().contains(prefs.getString("classes", ""))) {
planCardList.add(substs.get(i));
persPlanEmpty = false;
}
}
}
// for seniors
else if (!prefs.getString("courses", "").isEmpty() && !prefs.getString("classes", "").isEmpty()) {
if (!substs.get(i).getGroup().equals("") && !substs.get(i).getCourse().equals("")) {
if (prefs.getString("courses", "").contains(substs.get(i).getCourse())) {
if (prefs.getString("classes", "").contains(substs.get(i).getGroup()) || substs.get(i).getGroup().contains(prefs.getString("classes", ""))) {
planCardList.add(substs.get(i));
persPlanEmpty = false;
}
}
}
}
}
recyclerView.getAdapter().notifyDataSetChanged(); // TODO check whether this is necessary
Collections.sort(planCardList, new Comparator<Subst>() {
@Override
public int compare(Subst lhs, Subst rhs) {
return Integer.compare(rhs.getPriority(), lhs.getPriority());
}
});
recyclerView.scheduleLayoutAnimation();
mAdapter.setSubst(planCardList);
bottomSheetText.setText(prefs.getString("informational", getString(R.string.noinfo)));
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
if (persPlanEmpty) {
recyclerView.setVisibility(View.GONE);
smileydown.setVisibility(View.VISIBLE);
smileydowntext.setVisibility(View.VISIBLE);
linearsmiley.setVisibility(View.VISIBLE);
linearsmiley.scheduleLayoutAnimation();
}
}
}, 64);
} catch (NullPointerException e) {
}
}
});
// pullToRefresh.setRefreshing(true);
// new fetcher().execute();
pullToRefresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
pullToRefresh.setRefreshing(true);
new fetcher().execute();
bottomSheetText.setText(prefs.getString("informational", getString(R.string.noinfo)));
}
});
}
private class fetcher extends AsyncTask<Void, Void, Void> {
private int count = 0, pCount = 0, priority = 200;
final String OLD_FORMAT = "EEE, dd MMM yyyy HH:mm:ss zzz", NEW_FORMAT = "yyyy-MM-dd, HH:mm:ss";
String newDateString, informational;
String[] groupS, dateS, timeS, courseS, roomS, additionalS;
boolean attempt = false, npe = false, emptyIcon;
URL url;
URLConnection connection;
String modified;
Elements rows, paragraphs;
Document doc;
final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity());
final SharedPreferences.Editor edit = prefs.edit();
final SwipeRefreshLayout pullToRefresh = getView().findViewById(R.id.pullToRefresh);
ProgressBar progressBar;
SimpleDateFormat sdf = new SimpleDateFormat(OLD_FORMAT);
Date d;
protected fetcher() {
}
@Override
protected Void doInBackground(Void... params) {
try {
doc = Jsoup.connect("https://djd4rkn355.github.io/subst").get();
url = new URL("https://djd4rkn355.github.io/subst");
connection = url.openConnection();
rows = doc.select("tr");
count = rows.size();
modified = connection.getHeaderField("Last-Modified");
d = new Date(connection.getHeaderField("Last-Modified"));
edit.putString("time", connection.getHeaderField("Last-Modified"));
paragraphs = doc.select("p");
pCount = paragraphs.size();
attempt = true;
for (int i = 0; i < pCount; i++) {
if (i == 0) {
informational = paragraphs.get(i).text();
} else {
informational += "\n\n" + paragraphs.get(i).text();
}
}
edit.putString("informational", informational);
edit.apply();
groupS = new String[count];
dateS = new String[count];
timeS = new String[count];
courseS = new String[count];
roomS = new String[count];
additionalS = new String[count];
progressBar = getView().getRootView().findViewById(R.id.progressBar);
progressBar.setProgress(0);
progressBar.setMax(count);
substViewModel.deleteAllSubst();
if (attempt) {
for (int i = 0; i < count; i++) {
Element row = rows.get(i);
Elements cols = row.select("th");
groupS[i] = cols.get(0).text();
dateS[i] = cols.get(1).text();
timeS[i] = cols.get(2).text();
courseS[i] = cols.get(3).text();
roomS[i] = cols.get(4).text();
additionalS[i] = cols.get(5).text();
progressBar.incrementProgressBy(1);
int drawable = icons(courseS[i]);
Subst subst = new Subst(drawable, groupS[i], dateS[i], timeS[i], courseS[i], roomS[i], additionalS[i], priority);
substViewModel.insert(subst);
priority--;
}
}
} catch (IOException e1) {
npe = true;
} catch (NullPointerException e1) {
npe = true;
}
return null;
}
private int icons(String course) {
emptyIcon = false;
if (course.toLowerCase().contains("deu") || course.toLowerCase().contains("dep") || course.toLowerCase().contains("daz")) {
return R.drawable.ic_german;
} else if (course.toLowerCase().contains("mat") || course.toLowerCase().contains("map")) {
return R.drawable.ic_maths;
} else if (course.toLowerCase().contains("eng") || course.toLowerCase().contains("enp") || course.toLowerCase().contains("ena")) {
return R.drawable.ic_english;
} else if (course.toLowerCase().contains("spo") || course.toLowerCase().contains("spp") || course.toLowerCase().contains("spth")) {
return R.drawable.ic_pe;
} else if (course.toLowerCase().contains("pol") || course.toLowerCase().contains("pop")) {
return R.drawable.ic_politics;
} else if (course.toLowerCase().contains("dar") || course.toLowerCase().contains("dap")) {
return R.drawable.ic_drama;
} else if (course.toLowerCase().contains("phy") || course.toLowerCase().contains("php")) {
return R.drawable.ic_physics;
} else if (course.toLowerCase().contains("bio") || course.toLowerCase().contains("bip") || course.toLowerCase().contains("nw")) {
return R.drawable.ic_biology;
} else if (course.toLowerCase().contains("che") || course.toLowerCase().contains("chp")) {
return R.drawable.ic_chemistry;
} else if (course.toLowerCase().contains("phi") || course.toLowerCase().contains("psp")) {
return R.drawable.ic_philosophy;
} else if (course.toLowerCase().contains("laa") || course.toLowerCase().contains("laf") || course.toLowerCase().contains("lat")) {
return R.drawable.ic_latin;
} else if (course.toLowerCase().contains("spa") || course.toLowerCase().contains("spf")) {
return R.drawable.ic_spanish;
} else if (course.toLowerCase().contains("fra") || course.toLowerCase().contains("frf") || course.toLowerCase().contains("frz")) {
return R.drawable.ic_french;
} else if (course.toLowerCase().contains("inf")) {
return R.drawable.ic_compsci;
} else if (course.toLowerCase().contains("ges")) {
return R.drawable.ic_history;
} else if (course.toLowerCase().contains("rel")) {
return R.drawable.ic_religion;
} else if (course.toLowerCase().contains("geg") || course.toLowerCase().contains("wuk")) {
return R.drawable.ic_geography;
} else if (course.toLowerCase().contains("kun")) {
return R.drawable.ic_arts;
} else if (course.toLowerCase().contains("mus")) {
return R.drawable.ic_music;
} else if (course.toLowerCase().contains("tue")) {
return R.drawable.ic_turkish;
} else if (course.toLowerCase().contains("chi")) {
return R.drawable.ic_chinese;
} else if (course.toLowerCase().contains("gll")) {
return R.drawable.ic_gll;
} else if (course.toLowerCase().contains("wat")) {
return R.drawable.ic_wat;
} else if (course.toLowerCase().contains("för")) {
return R.drawable.ic_help;
} else if (course.toLowerCase().contains("wp") || course.toLowerCase().contains("met")) {
return R.drawable.ic_pencil;
} else {
emptyIcon = true;
return R.drawable.ic_empty;
}
}
@Override
protected void onPostExecute(Void result) {
try {
if (attempt) {
final Animation fadeOut = AnimationUtils.loadAnimation(getContext(), R.anim.fade_out);
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
progressBar.startAnimation(fadeOut);
}
}, 200);
fadeOut.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation arg0) {
}
@Override
public void onAnimationRepeat(Animation arg0) {
}
@Override
public void onAnimationEnd(Animation arg0) {
progressBar.setProgress(0);
}
});
sdf.applyPattern(NEW_FORMAT);
newDateString = sdf.format(d);
View contextView = getView().getRootView().findViewById(R.id.coordination);
Snackbar snackbar = make(contextView, getText(R.string.lastupdated) + ": " + newDateString, Snackbar.LENGTH_LONG)
.setAction("Action", null);
snackbar.show();
pullToRefresh.setRefreshing(false);
} else if (npe) {
pullToRefresh.setRefreshing(false);
View contextView = getView().getRootView().findViewById(R.id.coordination);
Snackbar snackbar = make(contextView, getText(R.string.nointernet), Snackbar.LENGTH_LONG)
.setAction("Action", null);
snackbar.show();
}
} catch (NullPointerException e) {
}
}
}
}
@@ -0,0 +1,316 @@
package com.denizd.substitutionplan;
import android.content.SharedPreferences;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.preference.PreferenceManager;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.google.android.material.snackbar.Snackbar;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProviders;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.LinearLayout;
import android.widget.ProgressBar;
import android.widget.TextView;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.io.IOException;
import java.net.URL;
import java.net.URLConnection;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import static com.google.android.material.snackbar.Snackbar.make;
public class FragmentPlan extends Fragment {
private RecyclerView recyclerView;
private CardAdapter mAdapter;
private RecyclerView.LayoutManager layoutManager;
private ArrayList<Subst> planCardList;
private TextView bottomSheetText;
private SubstViewModel substViewModel;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.plan, null);
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
final SwipeRefreshLayout pullToRefresh = getView().findViewById(R.id.pullToRefresh);
bottomSheetText = getView().getRootView().findViewById(R.id.bottom_sheet_text);
final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity());
final SharedPreferences.Editor edit = prefs.edit();
bottomSheetText.setText(prefs.getString("informational", getString(R.string.noinfo)));
planCardList = new ArrayList<>();
recyclerView = getView().findViewById(R.id.linearRecycler);
layoutManager = new LinearLayoutManager(getContext());
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(layoutManager);
mAdapter = new CardAdapter(planCardList);
recyclerView.setAdapter(mAdapter);
if (prefs.getInt("firstTimeOpening", 0) == 2) {
if (!prefs.getBoolean("notif", false)) {
pullToRefresh.setRefreshing(true);
new fetcher().execute();
edit.putInt("firstTimeOpening", 3);
edit.apply();
}
}
if (prefs.getBoolean("autoRefresh", false)) {
pullToRefresh.setRefreshing(true);
new fetcher().execute();
bottomSheetText.setText(prefs.getString("informational", getString(R.string.noinfo)));
}
substViewModel = ViewModelProviders.of(getActivity()).get(SubstViewModel.class);
substViewModel.getAllSubst().observe(this, new Observer<List<Subst>>() {
@Override
public void onChanged(List<Subst> substs) {
// LayoutAnimationController animationOut = AnimationUtils.loadLayoutAnimation(getContext(), R.anim.layout_animation_fall_down_out);
// LayoutAnimationController animationIn = AnimationUtils.loadLayoutAnimation(getContext(), R.anim.layout_animation_fall_down);
// recyclerView.setLayoutAnimation(animationOut);
// recyclerView.scheduleLayoutAnimation();
mAdapter.setSubst(substs);
// recyclerView.setLayoutAnimation(animationIn);
recyclerView.scheduleLayoutAnimation();
bottomSheetText.setText(prefs.getString("informational", getString(R.string.noinfo)));
}
});
pullToRefresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
pullToRefresh.setRefreshing(true);
new fetcher().execute();
bottomSheetText.setText(prefs.getString("informational", getString(R.string.noinfo)));
}
});
}
private class fetcher extends AsyncTask<Void, Void, Void> {
private int count = 0, pCount = 0, priority = 200;
final String OLD_FORMAT = "EEE, dd MMM yyyy HH:mm:ss zzz", NEW_FORMAT = "yyyy-MM-dd, HH:mm:ss";
String newDateString, informational;
String[] groupS, dateS, timeS, courseS, roomS, additionalS;
boolean attempt = false, npe = false, emptyIcon;
URL url;
URLConnection connection;
String modified;
Elements rows, paragraphs;
Document doc;
final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity());
final SharedPreferences.Editor edit = prefs.edit();
final SwipeRefreshLayout pullToRefresh = getView().findViewById(R.id.pullToRefresh);
ProgressBar progressBar;
SimpleDateFormat sdf = new SimpleDateFormat(OLD_FORMAT);
Date d;
protected fetcher() {
}
@Override
protected Void doInBackground(Void... params) {
try {
doc = Jsoup.connect("https://djd4rkn355.github.io/subst").get();
url = new URL("https://djd4rkn355.github.io/subst");
connection = url.openConnection();
rows = doc.select("tr");
count = rows.size();
modified = connection.getHeaderField("Last-Modified");
d = new Date(connection.getHeaderField("Last-Modified"));
edit.putString("time", connection.getHeaderField("Last-Modified"));
paragraphs = doc.select("p");
pCount = paragraphs.size();
attempt = true;
for (int i = 0; i < pCount; i++) {
if (i == 0) {
informational = paragraphs.get(i).text();
} else {
informational += "\n\n" + paragraphs.get(i).text();
}
}
edit.putString("informational", informational);
edit.apply();
groupS = new String[count];
dateS = new String[count];
timeS = new String[count];
courseS = new String[count];
roomS = new String[count];
additionalS = new String[count];
progressBar = getView().getRootView().findViewById(R.id.progressBar);
progressBar.setProgress(0);
progressBar.setMax(count);
substViewModel.deleteAllSubst();
if (attempt) {
for (int i = 0; i < count; i++) {
Element row = rows.get(i);
Elements cols = row.select("th");
groupS[i] = cols.get(0).text();
dateS[i] = cols.get(1).text();
timeS[i] = cols.get(2).text();
courseS[i] = cols.get(3).text();
roomS[i] = cols.get(4).text();
additionalS[i] = cols.get(5).text();
progressBar.incrementProgressBy(1);
int drawable = icons(courseS[i]);
Subst subst = new Subst(drawable, groupS[i], dateS[i], timeS[i], courseS[i], roomS[i], additionalS[i], priority);
substViewModel.insert(subst);
priority--;
}
}
} catch (IOException e1) {
npe = true;
} catch (NullPointerException e1) {
npe = true;
}
return null;
}
private int icons(String course) {
emptyIcon = false;
if (course.toLowerCase().contains("deu") || course.toLowerCase().contains("dep") || course.toLowerCase().contains("daz")) {
return R.drawable.ic_german;
} else if (course.toLowerCase().contains("mat") || course.toLowerCase().contains("map")) {
return R.drawable.ic_maths;
} else if (course.toLowerCase().contains("eng") || course.toLowerCase().contains("enp") || course.toLowerCase().contains("ena")) {
return R.drawable.ic_english;
} else if (course.toLowerCase().contains("spo") || course.toLowerCase().contains("spp") || course.toLowerCase().contains("spth")) {
return R.drawable.ic_pe;
} else if (course.toLowerCase().contains("pol") || course.toLowerCase().contains("pop")) {
return R.drawable.ic_politics;
} else if (course.toLowerCase().contains("dar") || course.toLowerCase().contains("dap")) {
return R.drawable.ic_drama;
} else if (course.toLowerCase().contains("phy") || course.toLowerCase().contains("php")) {
return R.drawable.ic_physics;
} else if (course.toLowerCase().contains("bio") || course.toLowerCase().contains("bip") || course.toLowerCase().contains("nw")) {
return R.drawable.ic_biology;
} else if (course.toLowerCase().contains("che") || course.toLowerCase().contains("chp")) {
return R.drawable.ic_chemistry;
} else if (course.toLowerCase().contains("phi") || course.toLowerCase().contains("psp")) {
return R.drawable.ic_philosophy;
} else if (course.toLowerCase().contains("laa") || course.toLowerCase().contains("laf") || course.toLowerCase().contains("lat")) {
return R.drawable.ic_latin;
} else if (course.toLowerCase().contains("spa") || course.toLowerCase().contains("spf")) {
return R.drawable.ic_spanish;
} else if (course.toLowerCase().contains("fra") || course.toLowerCase().contains("frf") || course.toLowerCase().contains("frz")) {
return R.drawable.ic_french;
} else if (course.toLowerCase().contains("inf")) {
return R.drawable.ic_compsci;
} else if (course.toLowerCase().contains("ges")) {
return R.drawable.ic_history;
} else if (course.toLowerCase().contains("rel")) {
return R.drawable.ic_religion;
} else if (course.toLowerCase().contains("geg") || course.toLowerCase().contains("wuk")) {
return R.drawable.ic_geography;
} else if (course.toLowerCase().contains("kun")) {
return R.drawable.ic_arts;
} else if (course.toLowerCase().contains("mus")) {
return R.drawable.ic_music;
} else if (course.toLowerCase().contains("tue")) {
return R.drawable.ic_turkish;
} else if (course.toLowerCase().contains("chi")) {
return R.drawable.ic_chinese;
} else if (course.toLowerCase().contains("gll")) {
return R.drawable.ic_gll;
} else if (course.toLowerCase().contains("wat")) {
return R.drawable.ic_wat;
} else if (course.toLowerCase().contains("för")) {
return R.drawable.ic_help;
} else if (course.toLowerCase().contains("wp") || course.toLowerCase().contains("met")) {
return R.drawable.ic_pencil;
} else {
emptyIcon = true;
return R.drawable.ic_empty;
}
}
@Override
protected void onPostExecute(Void result) {
try {
if (attempt) {
final Animation fadeOut = AnimationUtils.loadAnimation(getContext(), R.anim.fade_out);
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
progressBar.startAnimation(fadeOut);
}
}, 200);
fadeOut.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation arg0) {
}
@Override
public void onAnimationRepeat(Animation arg0) {
}
@Override
public void onAnimationEnd(Animation arg0) {
progressBar.setProgress(0);
}
});
sdf.applyPattern(NEW_FORMAT);
newDateString = sdf.format(d);
View contextView = getView().getRootView().findViewById(R.id.coordination);
Snackbar snackbar = make(contextView, getText(R.string.lastupdated) + ": " + newDateString, Snackbar.LENGTH_LONG)
.setAction("Action", null);
snackbar.show();
pullToRefresh.setRefreshing(false);
} else if (npe) {
pullToRefresh.setRefreshing(false);
View contextView = getView().getRootView().findViewById(R.id.coordination);
Snackbar snackbar = make(contextView, getText(R.string.nointernet), Snackbar.LENGTH_LONG)
.setAction("Action", null);
snackbar.show();
}
} catch (NullPointerException e) {
}
}
}
}
@@ -0,0 +1,318 @@
package com.denizd.substitutionplan;
import android.content.SharedPreferences;
import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.os.AsyncTask;
import android.os.Bundle;
import android.preference.PreferenceManager;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.constraintlayout.widget.ConstraintLayout;
import com.google.android.material.snackbar.Snackbar;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProviders;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.EditText;
import android.widget.ProgressBar;
import android.widget.TextView;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import static com.google.android.material.snackbar.Snackbar.make;
public class FragmentSearch extends Fragment {
ConstraintLayout constraintLayout;
private RecyclerView recyclerView;
private CardAdapter mAdapter;
private RecyclerView.LayoutManager layoutManager;
private ArrayList<Subst> planCardList;
private SubstViewModel substViewModel;
private boolean search = false;
private EditText searchfield;
@Override
public void onStart() {
super.onStart();
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.search, container, false);
constraintLayout = rootView.findViewById(R.id.fragment_container);
return rootView;
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
final ProgressBar progressBar = getView().getRootView().findViewById(R.id.progressBar);
progressBar.setProgress(0);
planCardList = new ArrayList<>();
recyclerView = getView().findViewById(R.id.linearRecyclerSearch);
layoutManager = new LinearLayoutManager(getContext());
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(layoutManager);
mAdapter = new CardAdapter(planCardList);
recyclerView.setAdapter(mAdapter);
searchfield = getView().findViewById(R.id.searchbar);
searchfield.addTextChangedListener(new TextWatcher() {
public void afterTextChanged(Editable s) {}
public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
public void onTextChanged(CharSequence s, int start, int before, int count) {
substViewModel = ViewModelProviders.of(getActivity()).get(SubstViewModel.class);
substViewModel.getAllSubst().observe(getActivity(), new Observer<List<Subst>>() {
@Override
public void onChanged(List<Subst> substs) {
planCardList.removeAll(substs);
new search(substs).searchSth();
}
});
}
});
}
private class search extends AsyncTask<Void, Void, Void> {
private List<Subst> substs;
protected search(List<Subst> substs) {
this.substs = substs;
}
@Override
protected Void doInBackground(Void... voids) {
return null;
}
protected void searchSth() {
for (int i = 0; i < substs.size(); i++) {
if (substs.get(i).getGroup().toLowerCase().contains(searchfield.getText().toString().toLowerCase())) {
search = true;
}
if (substs.get(i).getDate().toLowerCase().toLowerCase().contains(searchfield.getText().toString().toLowerCase())) {
search = true;
}
if (substs.get(i).getTime().toLowerCase().contains(searchfield.getText().toString().toLowerCase())) {
search = true;
}
if (substs.get(i).getCourse().toLowerCase().contains(searchfield.getText().toString().toLowerCase())) {
search = true;
}
if (substs.get(i).getRoom().toLowerCase().contains(searchfield.getText().toString().toLowerCase())) {
search = true;
}
if (substs.get(i).getAdditional().toLowerCase().contains(searchfield.getText().toString().toLowerCase())) {
search = true;
}
if (search) {
planCardList.add(substs.get(i));
search = false;
}
}
}
}
// private class fetcher extends AsyncTask<Void, Void, Void> {
//
// private int count = 0, iconColour;
// String[] groupS, dateS, timeS, courseS, roomS, additionalS;
// boolean attempt = false, search = false, first = false, npe = false, emptyIcon;
// Elements rows;
// Document doc;
// final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity());
// private RecyclerView recyclerView;
// private CardAdapter mAdapter;
// private RecyclerView.LayoutManager layoutManager;
// private ArrayList<Subst> planCardList;
//
// protected fetcher() {}
//
// @Override
// protected Void doInBackground(Void... params) {
//
// if (!first) {
// try {
// doc = Jsoup.connect("https://djd4rkn355.github.io/subst").get();
// rows = doc.select("tr");
// count = rows.size();
// attempt = true;
//
// } catch (IOException e1) {
// npe = true;
// }
//
// groupS = new String[count];
// dateS = new String[count];
// timeS = new String[count];
// courseS = new String[count];
// roomS = new String[count];
// additionalS = new String[count];
//
// if (attempt) {
// for (int i = 0; i < count; i++) {
// Element row = rows.get(i);
// Elements cols = row.select("th");
// groupS[i] = cols.get(0).text();
// dateS[i] = cols.get(1).text();
// timeS[i] = cols.get(2).text();
// courseS[i] = cols.get(3).text();
// roomS[i] = cols.get(4).text();
// additionalS[i] = cols.get(5).text();
// }
// }
//
// if (prefs.getInt("themeInt", 0) == 0) {
// iconColour = Color.parseColor("#212121");
// }
// if (prefs.getInt("themeInt", 0) == 1) {
// iconColour = Color.parseColor("#e0e0e0");
// }
// first = true;
// }
//
// return null;
// }
//
// private int icons(String[] courseS, int i) {
// emptyIcon = false;
// if (courseS[i].toLowerCase().contains("deu") || courseS[i].toLowerCase().contains("dep") || courseS[i].toLowerCase().contains("daz")) {
// return R.drawable.ic_german;
// } else if (courseS[i].toLowerCase().contains("mat") || courseS[i].toLowerCase().contains("map")) {
// return R.drawable.ic_maths;
// } else if (courseS[i].toLowerCase().contains("eng") || courseS[i].toLowerCase().contains("enp") || courseS[i].toLowerCase().contains("ena")) {
// return R.drawable.ic_english;
// } else if (courseS[i].toLowerCase().contains("spo") || courseS[i].toLowerCase().contains("spp") || courseS[i].toLowerCase().contains("spth")) {
// return R.drawable.ic_pe;
// } else if (courseS[i].toLowerCase().contains("pol") || courseS[i].toLowerCase().contains("pop")) {
// return R.drawable.ic_politics;
// } else if (courseS[i].toLowerCase().contains("dar") || courseS[i].toLowerCase().contains("dap")) {
// return R.drawable.ic_drama;
// } else if (courseS[i].toLowerCase().contains("phy") || courseS[i].toLowerCase().contains("php")) {
// return R.drawable.ic_physics;
// } else if (courseS[i].toLowerCase().contains("bio") || courseS[i].toLowerCase().contains("bip") || courseS[i].toLowerCase().contains("nw")) {
// return R.drawable.ic_biology;
// } else if (courseS[i].toLowerCase().contains("che") || courseS[i].toLowerCase().contains("chp")) {
// return R.drawable.ic_chemistry;
// } else if (courseS[i].toLowerCase().contains("phi") || courseS[i].toLowerCase().contains("psp")) {
// return R.drawable.ic_philosophy;
// } else if (courseS[i].toLowerCase().contains("laa") || courseS[i].toLowerCase().contains("laf") || courseS[i].toLowerCase().contains("lat")) {
// return R.drawable.ic_latin;
// } else if (courseS[i].toLowerCase().contains("spa") || courseS[i].toLowerCase().contains("spf")) {
// return R.drawable.ic_spanish;
// } else if (courseS[i].toLowerCase().contains("fra") || courseS[i].toLowerCase().contains("frf") || courseS[i].toLowerCase().contains("frz")) {
// return R.drawable.ic_french;
// } else if (courseS[i].toLowerCase().contains("inf")) {
// return R.drawable.ic_compsci;
// } else if (courseS[i].toLowerCase().contains("ges")) {
// return R.drawable.ic_history;
// } else if (courseS[i].toLowerCase().contains("rel")) {
// return R.drawable.ic_religion;
// } else if (courseS[i].toLowerCase().contains("geg") || courseS[i].toLowerCase().contains("wuk")) {
// return R.drawable.ic_geography;
// } else if (courseS[i].toLowerCase().contains("kun")) {
// return R.drawable.ic_arts;
// } else if (courseS[i].toLowerCase().contains("mus")) {
// return R.drawable.ic_music;
// } else if (courseS[i].toLowerCase().contains("tue")) {
// return R.drawable.ic_turkish;
// } else if (courseS[i].toLowerCase().contains("chi")) {
// return R.drawable.ic_chinese;
// } else if (courseS[i].toLowerCase().contains("gll")) {
// return R.drawable.ic_gll;
// } else if (courseS[i].toLowerCase().contains("wat")) {
// return R.drawable.ic_wat;
// } else if (courseS[i].toLowerCase().contains("för")) {
// return R.drawable.ic_help;
// } else if (courseS[i].toLowerCase().contains("wp") || courseS[i].toLowerCase().contains("met")) {
// return R.drawable.ic_pencil;
// } else {
// emptyIcon = true;
// return R.drawable.ic_empty;
// }
// }
//
// @Override
// protected void onPostExecute(Void result) {
// if (attempt) {
//
// try {
//
// planCardList = new ArrayList<>();
// recyclerView = getView().findViewById(R.id.linearRecyclerSearch);
// layoutManager = new LinearLayoutManager(getContext());
// recyclerView.setHasFixedSize(true);
// recyclerView.setLayoutManager(layoutManager);
// mAdapter = new CardAdapter(planCardList);
// recyclerView.setAdapter(mAdapter);
// } catch (NullPointerException e) {
// return;
// }
// recyclerView.removeAllViews();
// EditText searchfield = getView().findViewById(R.id.searchbar);
// final Animation animationIn = AnimationUtils.loadAnimation(getActivity(), R.anim.fade_in);
//
// for (int i = 0; i < count; i++) {
// if (groupS[i].toLowerCase().contains(searchfield.getText().toString().toLowerCase())) {
// search = true;
// } if (dateS[i].toLowerCase().toLowerCase().contains(searchfield.getText().toString().toLowerCase())) {
// search = true;
// } if (timeS[i].toLowerCase().contains(searchfield.getText().toString().toLowerCase())) {
// search = true;
// } if (courseS[i].toLowerCase().contains(searchfield.getText().toString().toLowerCase())) {
// search = true;
// } if (roomS[i].toLowerCase().contains(searchfield.getText().toString().toLowerCase())) {
// search = true;
// } if (additionalS[i].toLowerCase().contains(searchfield.getText().toString().toLowerCase())) {
// search = true;
// }
//
// if (search) {
// Drawable drawable = getResources().getDrawable(icons(courseS, i));
// if (!emptyIcon) {
// drawable.setTint(iconColour);
// }
// planCardList.add(new Subst(0, groupS[i], dateS[i], timeS[i], courseS[i], roomS[i], additionalS[i], 0));
// recyclerView.setAnimation(animationIn);
// search = false;
// }
// }
// } else if (npe) {
// View contextView = getView().getRootView().findViewById(R.id.coordination);
// Snackbar snackbar = make(contextView, getText(R.string.nointernet), Snackbar.LENGTH_LONG)
// .setAction("Action", null);
// snackbar.show();
// }
// }
// }
}
@@ -0,0 +1,646 @@
package com.denizd.substitutionplan;
import android.app.AlertDialog;
import android.content.SharedPreferences;
import android.content.res.Resources;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.preference.PreferenceManager;
import androidx.annotation.ColorInt;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.browser.customtabs.CustomTabsIntent;
import androidx.coordinatorlayout.widget.CoordinatorLayout;
import androidx.fragment.app.Fragment;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.TypedValue;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.LinearLayout;
import android.widget.ProgressBar;
import android.widget.Switch;
import android.widget.TextView;
import android.widget.Toast;
import com.jaredrummler.android.device.DeviceName;
import java.text.DecimalFormat;
import java.util.Random;
public class FragmentSettings extends Fragment {
CoordinatorLayout coordinatorLayout;
private int cs = 7;
private String manufacturer, name, model;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.content_settings, container, false);
coordinatorLayout = rootView.findViewById(R.id.fragment_container);
return rootView;
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
final ProgressBar progressBar = getView().getRootView().findViewById(R.id.progressBar);
progressBar.setProgress(0);
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext());
final SharedPreferences.Editor edit = prefs.edit();
CustomTabsIntent.Builder builder = new CustomTabsIntent.Builder();
builder.setToolbarColor(getResources().getColor(R.color.white));
final CustomTabsIntent customTabsIntent = builder.build();
final EditText txtName = getView().findViewById(R.id.txtName);
final Switch greeting = getView().findViewById(R.id.switchDisableGreeting);
final Switch darkmode = getView().findViewById(R.id.switchDark);
final EditText txtClasses = getView().findViewById(R.id.txtClasses);
final EditText txtCourses = getView().findViewById(R.id.txtCourses);
final ImageButton helpClasses = getView().findViewById(R.id.chipHelpClasses);
final ImageButton helpCourses = getView().findViewById(R.id.chipHelpCourses);
final Switch notifswitch = getView().findViewById(R.id.switchNotifications);
final Switch defaultPlan = getView().findViewById(R.id.switchDefaultPlan);
final Switch openInfo = getView().findViewById(R.id.switchOpenInfo);
final Switch autoRefresh = getView().findViewById(R.id.switchAutoRefresh);
final LinearLayout website = getView().findViewById(R.id.btnWebsite);
final LinearLayout licences = getView().findViewById(R.id.btnLicences);
final TextView versionNumber = getView().findViewById(R.id.txtVersionTwo);
final LinearLayout tac = getView().findViewById(R.id.btnTerms);
final LinearLayout privacy = getView().findViewById(R.id.btnPrivacyP);
final LinearLayout version = getView().findViewById(R.id.btnVersion);
final TextView notif1 = getView().findViewById(R.id.txtNotifications);
final TextView auto1 = getView().findViewById(R.id.txtAutoRefresh);
final TextView notif2 = getView().findViewById(R.id.txtNotifiedAbout);
final TextView auto2 = getView().findViewById(R.id.txtAutoRefreshTwo);
helpCourses.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
AlertDialog.Builder alertDialog;
if (prefs.getInt("themeInt", 0) == 1) {
alertDialog = new AlertDialog.Builder(getContext(), R.style.AlertDialogCustomDark);
} else {
alertDialog = new AlertDialog.Builder(getContext(), R.style.AlertDialogCustomLight);
}
alertDialog.setTitle(getString(R.string.helpCoursesTitle));
View dialogView = LayoutInflater.from(getContext()).inflate(R.layout.simple_dialog, null);
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;
if (prefs.getInt("themeInt", 0) == 1) {
alertDialog = new AlertDialog.Builder(getContext(), R.style.AlertDialogCustomDark);
} else {
alertDialog = new AlertDialog.Builder(getContext(), R.style.AlertDialogCustomLight);
}
alertDialog.setTitle(getString(R.string.helpClassesTitle));
View dialogView = LayoutInflater.from(getContext()).inflate(R.layout.simple_dialog, null);
TextView dialogText = dialogView.findViewById(R.id.dialogtext);
dialogText.setText(getString(R.string.helpClasses));
alertDialog.setView(dialogView);
alertDialog.show();
}
});
txtName.setText(prefs.getString("username", ""));
txtName.addTextChangedListener(new TextWatcher() {
public void afterTextChanged(Editable s) {
}
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
public void onTextChanged(CharSequence s, int start, int before, int count) {
edit.putString("username", txtName.getText().toString());
edit.apply();
}
});
if (!prefs.getBoolean("greeting", false)) {
greeting.setChecked(false);
}
if (prefs.getBoolean("greeting", false)) {
greeting.setChecked(true);
}
greeting.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
edit.putBoolean("greeting", true);
}
if (!isChecked) {
edit.putBoolean("greeting", false);
}
edit.apply();
}
});
if (prefs.getInt("themeInt", 0) == 0) {
darkmode.setChecked(false);
}
if (prefs.getInt("themeInt", 0) == 1) {
darkmode.setChecked(true);
}
darkmode.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
edit.putInt("themeInt", 1);
}
if (!isChecked) {
edit.putInt("themeInt", 0);
}
edit.apply();
}
});
txtClasses.setText(prefs.getString("classes", ""));
txtCourses.setText(prefs.getString("courses", ""));
txtClasses.addTextChangedListener(new TextWatcher() {
public void afterTextChanged(Editable s) {
}
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
public void onTextChanged(CharSequence s, int start, int before, int count) {
edit.putString("classes", txtClasses.getText().toString());
edit.apply();
}
});
txtCourses.addTextChangedListener(new TextWatcher() {
public void afterTextChanged(Editable s) {
}
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
public void onTextChanged(CharSequence s, int start, int before, int count) {
edit.putString("courses", txtCourses.getText().toString());
edit.apply();
}
});
if (!prefs.getBoolean("notif", false)) {
notifswitch.setChecked(false);
}
if (prefs.getBoolean("notif", false)) {
notifswitch.setChecked(true);
}
notifswitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
edit.putBoolean("notif", true);
}
if (!isChecked) {
edit.putBoolean("notif", false);
}
edit.apply();
}
});
if (!prefs.getBoolean("defaultPersonalised", false)) {
defaultPlan.setChecked(false);
}
if (prefs.getBoolean("defaultPersonalised", false)) {
defaultPlan.setChecked(true);
}
defaultPlan.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
edit.putBoolean("defaultPersonalised", true);
}
if (!isChecked) {
edit.putBoolean("defaultPersonalised", false);
}
edit.apply();
}
});
if (!prefs.getBoolean("openInfo", false)) {
openInfo.setChecked(false);
}
if (prefs.getBoolean("openInfo", false)) {
openInfo.setChecked(true);
}
openInfo.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
edit.putBoolean("openInfo", true);
}
if (!isChecked) {
edit.putBoolean("openInfo", false);
}
edit.apply();
}
});
if (!prefs.getBoolean("autoRefresh", false)) {
autoRefresh.setChecked(false);
}
if (prefs.getBoolean("autoRefresh", false)) {
autoRefresh.setChecked(true);
}
autoRefresh.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
edit.putBoolean("autoRefresh", true);
}
if (!isChecked) {
edit.putBoolean("autoRefresh", false);
}
edit.apply();
}
});
// TODO check whether Huawei devices actually support background services
// DeviceName.with(getContext()).request(new DeviceName.Callback() {
// @Override
// public void onFinished(DeviceName.DeviceInfo info, Exception error) {
// manufacturer = info.manufacturer;
// if (manufacturer.contains("Huawei") ||
// manufacturer.contains("Honor")) {
//// if (true) {
// notifswitch.setChecked(false);
// autoRefresh.setChecked(true);
// notifswitch.setEnabled(false);
// autoRefresh.setEnabled(false);
//
// @ColorInt int color;
// if (prefs.getInt("themeInt", 0) == 1) {
// TypedValue typedValue = new TypedValue();
// Resources.Theme theme = getContext().getTheme();
// theme.resolveAttribute(R.attr.colorHintDark, typedValue, true);
// color = typedValue.data;
// notif2.setTextColor(color);
// auto2.setTextColor(color);
// } else {
// TypedValue typedValue = new TypedValue();
// Resources.Theme theme = getContext().getTheme();
// theme.resolveAttribute(R.attr.colorHint, typedValue, true);
// color = typedValue.data;
// }
//
// notif1.setTextColor(color);
// auto1.setTextColor(color);
// edit.putBoolean("notif", false);
// edit.putBoolean("autoRefresh", true);
// edit.apply();
// notif2.setText(R.string.chinaNotif);
// auto2.setText(R.string.chinaAuto);
// }
// }
// });
website.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
customTabsIntent.launchUrl(getContext(), Uri.parse("http://307.joomla.schule.bremen.de"));
}
});
licences.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
AlertDialog.Builder alertDialog;
if (prefs.getInt("themeInt", 0) == 1) {
alertDialog = new AlertDialog.Builder(getContext(), R.style.AlertDialogCustomDark);
} else {
alertDialog = new AlertDialog.Builder(getContext(), R.style.AlertDialogCustomLight);
}
alertDialog.setTitle("Licences");
View dialogView = LayoutInflater.from(getContext()).inflate(R.layout.simple_dialog, null);
TextView dialogText = dialogView.findViewById(R.id.dialogtext);
dialogText.setText("Libraries:\n • Android Device Names © 2015 Jared Rummler, licensed under the Apache License, Version 2.0" +
"\n • EasyPreferences © 2018 Mukesh Solanki, licensed under the MIT License" +
"\n • jsoup HTML parser © 2009-2018 Jonathan Hedley, licensed under the open source MIT License" +
"\n\nFont:\n • Manrope © 2018-2019 Michael Sharanda, licensed under the SIL Open Font License 1.1" +
"\n\nIcons:\n • bqlqn\n • fjstudio\n • Freepik\n • Smashicons\n • © 2013-2019 Freepik Company S.L., licensed under Creative Commons BY 3.0" +
"\n\nMarketing & Publishing:\n • Leon Becker\n • Alex Lick\n • Batuhan Özcan\n • Erich Kerkesner");
alertDialog.setView(dialogView);
alertDialog.show();
}
});
tac.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
AlertDialog.Builder alertDialog;
if (prefs.getInt("themeInt", 0) == 1) {
alertDialog = new AlertDialog.Builder(getContext(), R.style.AlertDialogCustomDark);
} else {
alertDialog = new AlertDialog.Builder(getContext(), R.style.AlertDialogCustomLight);
}
alertDialog.setTitle("Terms & Conditions");
View dialogView = LayoutInflater.from(getContext()).inflate(R.layout.simple_dialog, null);
TextView dialogText = dialogView.findViewById(R.id.dialogtext);
dialogText.setText("These terms automatically apply to anyone using this app - therefore, please make sure to read them carefully before using the app. Copying or modifying parts of the app or the entire app, as well as creating derivative versions, is prohibited without permission. This app is intellectual property of the developer.\n" +
"\n" +
"The developer reserves the right to make changes to the app at any given time and for any reason. The user will be informed of any changes made accordingly.\n" +
"\n" +
"Tampering with the end device, in the form of rooting or otherwise modifying the operating system may result in malfunction of the software. In this case, the developer does not provide support, as the user is responsible for keeping the device free of software that may compromise its security.\n" +
"\n" +
"Full functionality of the app relies on a steady internet connection. The developer does not take responsibility for malfunction of these services, nor for any errors caused by the end device. The user is responsible for ensuring that their device is fully updated and fully functioning.\n" +
"\n" +
"As the app relies on third-parties, information provided in-app may be delayed or incorrect at times. The developer accepts no liability for any information mistakenly provided in the app.\n" +
"\n" +
"The developer may wish to update the app at any point. Should such action arise, then the user is advised to update the app to ensure proper functionality. However, the developer does not promise that the app will be continuously updated, and may stop providing the app at any point. Unless told otherwise, upon any termination, (a) the rights and licenses granted to the user in these terms will end; (b) the user must stop using the app, and (if needed) delete it from their device.\n" +
"\n" +
"Changes to these Terms & Conditions\n" +
"\n" +
"The developer may update these Terms & Conditions from time to time. Thus, the user is advised to review this page periodically for any changes. Any changes are effective immediately after they are posted on this page.\n" +
"\n" +
"Contact Us\n" +
"\n" +
"In case of questions or suggestions regarding these Terms & Conditions, the user is advised to contact the developer of this app. Contact information is provided through the Play Store.\n" +
"\n" +
"---\n" +
"\n" +
"These Terms & Conditions were modified upon the template provided by App Privacy Policy Generator. This service is in no way affiliated with AvH Plan or the developer.");
alertDialog.setView(dialogView);
alertDialog.show();
}
});
privacy.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
AlertDialog.Builder alertDialog;
if (prefs.getInt("themeInt", 0) == 1) {
alertDialog = new AlertDialog.Builder(getContext(), R.style.AlertDialogCustomDark);
} else {
alertDialog = new AlertDialog.Builder(getContext(), R.style.AlertDialogCustomLight);
}
alertDialog.setTitle("Privacy Policy");
View dialogView = LayoutInflater.from(getContext()).inflate(R.layout.simple_dialog, null);
TextView dialogText = dialogView.findViewById(R.id.dialogtext);
dialogText.setText("The app \"Alexander-von-Humboldt-Plan\", hereby abbreviated to AvH Plan, is provided as a free service by the developer for use as is.\n" +
"\n" +
"This page is used to inform visitors and users regarding policies with the collection, use, and disclosure of personal information, if they choose to make use of the service.\n" +
"\n" +
"AvH Plan does not collect, store, share, or in any other way use personal information retrieved from its users. Any information asked for within the app is only used to improve the user experience and as such, is stored locally and cannot be accessed by third-parties or be used to identify the user.\n" +
"\n" +
"Information Collection and Use\n" +
"\n" +
"At this moment, AvH Plan does not require personally identifiable information for its core functionality. Certain features do require entering information that may be personally identifiable, however, this data will be retained on the user's device and is therefore not accessible outside the app\n" +
"\n" +
"Log Data\n" +
"\n" +
"In the case of an error in the app, device-specific data may be collected and stored on your phone. This data is called Log Data. This Log Data may include information, such as your device's Internet Protocol (“IP”) address, device name, operating system version, the configuration of the app when utilising the service, the time and date when the last usage occured, and other statistics. This data can not be used to personally identify any user.\n" +
"\n" +
"Cookies\n" +
"\n" +
"Cookies are files with small amounts of data that are commonly used as anonymous unique identifiers on the web. AvH Plan strives to not make use of cookies for its functionality, however, as its functionality requires access to third-party-websites, cookies may be unintentionally collected by the device's web browser. AvH Plan does not make use of these cookies in any way.\n" +
"\n" +
"Service Providers\n" +
"\n" +
"No third-parties are employed for providing any functionality or services of the AvH Plan-app and as such, all functionality is accessible without directly sharing personal data with third-parties.\n" +
"\n" +
"Security\n" +
"\n" +
"While absolute security cannot be ensured due to the internet functionality the app employs, no information is shared over any transmission methods.\n" +
"\n" +
"Links to Other Sites\n" +
"\n" +
"This Service may contain links to other sites, which are not operated by the developer of AvH Plan. The user is advised to review the privacy policy of any webpage they may access through the app. No responsibility for the content of these third-party websites is provided by the app developer.\n" +
"\n" +
"Childrens Privacy\n" +
"\n" +
"The service does not address anyone under the age of 13. As the app does not collect any information from its users, no data is collected from users that may be under the age of 13.\n" +
"\n" +
"Changes to This Privacy Policy\n" +
"\n" +
"This privacy policy may be updated as the AvH Plan app is updated with new features. As such, the user is advised to review this page periodically for any changes. Any changes that may be made are effective immediately upon publishing.\n" +
"\n" +
"Contact Us\n" +
"\n" +
"In case of questions or suggestions regarding this privacy policy, the user is advised to contact the developer of this app. Contact information is provided through the Play Store.\n" +
"\n" +
"---\n" +
"\n" +
"This privacy policy was modified upon the template provided by privacypolicytemplate.net and App Privacy Policy Generator. These services are in no way affiliated with AvH Plan or the developer.");
alertDialog.setView(dialogView);
alertDialog.show();
}
});
version.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (cs > 0) {
cs--;
} else {
Toast.makeText(getContext(), getString(R.string.donttell), Toast.LENGTH_LONG).show();
cs = 7;
customTabsIntent.launchUrl(getContext(), Uri.parse("http://www.flussufer.de/gerd/person.htm"));
}
}
});
// if (BuildConfig.DEBUG) {
// versionNumber.setText(BuildConfig.VERSION_NAME + "-DEV_BUILD");
// } else {
versionNumber.setText(BuildConfig.VERSION_NAME);
// }
final LinearLayout hiddenBtn = getView().findViewById(R.id.btnHiddenENP);
hiddenBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(getActivity(), getString(R.string.bestclass),
Toast.LENGTH_LONG).show();
}
});
hiddenBtn.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
DeviceName.with(getContext()).request(new DeviceName.Callback() {
@Override
public void onFinished(DeviceName.DeviceInfo info, Exception error) {
name = info.marketName; // "Galaxy S8+"
model = info.model; // "SM-G955W"
}
});
AlertDialog.Builder alertDialog;
if (prefs.getInt("themeInt", 0) == 1) {
alertDialog = new AlertDialog.Builder(getContext(), R.style.AlertDialogCustomDark);
} else {
alertDialog = new AlertDialog.Builder(getContext(), R.style.AlertDialogCustomLight);
}
alertDialog.setTitle(getString(R.string.experimentalmenu));
View dialogView = LayoutInflater.from(getContext()).inflate(R.layout.edittext_dialog, null);
TextView dialogText = dialogView.findViewById(R.id.dialogtext);
dialogText.setText(getString(R.string.fortest));
final EditText dialogEditText = dialogView.findViewById(R.id.dialog_edittext);
final Button dialogButton = dialogView.findViewById(R.id.dialog_button);
dialogButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (dialogEditText.getText().toString().equals("@DEV_DIAGNOSTICS")) {
AlertDialog.Builder alertDialogDev;
if (prefs.getInt("themeInt", 0) == 1) {
alertDialogDev = new AlertDialog.Builder(getContext(), R.style.AlertDialogCustomDark);
} else {
alertDialogDev = new AlertDialog.Builder(getContext(), R.style.AlertDialogCustomLight);
}
alertDialogDev.setTitle(getString(R.string.diagnosticsmenu));
View dialogView = LayoutInflater.from(getContext()).inflate(R.layout.diagnostics_dialog, null);
final TextView dialogText = dialogView.findViewById(R.id.dialogtext);
setDiagnosticsText(dialogText, prefs);
Button launch = dialogView.findViewById(R.id.btnResetLaunch);
Button notif = dialogView.findViewById(R.id.btnResetNotif);
launch.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
edit.putInt("launchDev", 0);
edit.apply();
setDiagnosticsText(dialogText, prefs);
}
});
notif.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
edit.putInt("notificationTestNumberDev", 0);
edit.apply();
setDiagnosticsText(dialogText, prefs);
}
});
alertDialogDev.setView(dialogView);
alertDialogDev.show();
} else if (dialogEditText.getText().toString().equals("Tim Bergling")) {
Toast.makeText(getActivity(), "◢◤",
Toast.LENGTH_LONG).show();
} else if (dialogEditText.getText().toString().equals("Q1 Matchmaker")) {
final Random gen = new Random();
AlertDialog.Builder alertDialogDev;
if (prefs.getInt("themeInt", 0) == 1) {
alertDialogDev = new AlertDialog.Builder(getContext(), R.style.AlertDialogCustomDark);
} else {
alertDialogDev = new AlertDialog.Builder(getContext(), R.style.AlertDialogCustomLight);
}
alertDialogDev.setTitle(getString(R.string.dating));
View dialogView = LayoutInflater.from(getContext()).inflate(R.layout.dating_dialog, null);
Button datingBtn = dialogView.findViewById(R.id.dating_btn);
final EditText boyT = dialogView.findViewById(R.id.dating_txt1);
final EditText girlT = dialogView.findViewById(R.id.dating_txt2);
final CheckBox boy = dialogView.findViewById(R.id.cb1);
final CheckBox girl = dialogView.findViewById(R.id.cb2);
final TextView percentage = dialogView.findViewById(R.id.dating_txtp);
datingBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
double boyP = 0, girlP = 0, perc = 0;
if (boyT.getText().toString().isEmpty() || boy.isChecked()) {
boyT.setText(names.boy[gen.nextInt(names.boy.length)]);
}
if (girlT.getText().toString().isEmpty() || girl.isChecked()) {
girlT.setText(names.girl[gen.nextInt(names.girl.length)]);
}
for (int i = 0; i < boyT.getText().length(); i++) {
boyP++;
}
for (int i = 0; i < girlT.getText().length(); i++) {
girlP++;
}
if (girlP < boyP) {
perc = (girlP / boyP) * 100;
}
if (girlP > boyP) {
perc = (boyP / girlP) * 100;
}
char multiplyTempBoy = boyT.getText().charAt(boyT.getText().length() - 1);
char multiplyTempGirl = girlT.getText().charAt(girlT.getText().length() - 1);
double multiply = Character.getNumericValue(multiplyTempBoy) + Character.getNumericValue(multiplyTempGirl);
multiply = multiply / 1.2;
if (perc == 0) {
perc += 30;
}
DecimalFormat df = new DecimalFormat("#.##");
if (perc * (multiply / 40) > 100) {
percentage.setText("100.00%");
} else {
percentage.setText(df.format(perc * (multiply / 40)) + "%");
}
} catch (NullPointerException e) {
Toast.makeText(getActivity(), getString(R.string.error),
Toast.LENGTH_SHORT).show();
}
}
});
alertDialogDev.setView(dialogView);
alertDialogDev.show();
} else {
Toast.makeText(getActivity(), getString(R.string.nothinghappened),
Toast.LENGTH_LONG).show();
}
}
});
alertDialog.setView(dialogView);
alertDialog.show();
return true;
}
});
}
private void setDiagnosticsText(TextView dialogText, SharedPreferences prefs) {
dialogText.setText("First Launch: " + prefs.getString("firstTimeDev", "") +
"\n\nApp launched: " + prefs.getInt("launchDev", 0) +
"\n\nNotification Service fired: " + prefs.getInt("notificationTestNumberDev", 0) +
"\n\nDevice Name: " + name +
"\n\nDevice Model: " + model +
"\n\nAndroid Version: " + Build.VERSION.RELEASE);
}
}
@@ -0,0 +1,462 @@
package com.denizd.substitutionplan;
import android.app.ActivityManager;
import android.app.AlertDialog;
import android.app.SearchManager;
import android.app.job.JobInfo;
import android.app.job.JobScheduler;
import android.content.ComponentName;
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.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.preference.PreferenceManager;
import com.google.android.material.appbar.AppBarLayout;
import com.google.android.material.bottomnavigation.BottomNavigationView;
import com.google.android.material.bottomsheet.BottomSheetBehavior;
import com.google.android.material.chip.Chip;
import com.google.android.material.snackbar.Snackbar;
import com.jaredrummler.android.device.DeviceName;
import androidx.annotation.NonNull;
import androidx.coordinatorlayout.widget.CoordinatorLayout;
import androidx.fragment.app.Fragment;
import androidx.core.content.ContextCompat;
import android.view.LayoutInflater;
import android.view.View;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import android.view.MenuItem;
import android.view.Window;
import android.view.WindowManager;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Random;
import static com.google.android.material.snackbar.Snackbar.make;
public class MainActivity extends AppCompatActivity {
BottomSheetBehavior bottomSheetBehaviour;
private String manufacturer;
private String marketName;
protected void job() {
ComponentName componentName = new ComponentName(this, ScheduledJobService.class);
JobInfo info = new JobInfo.Builder(42, componentName)
.setRequiresCharging(false)
.setPersisted(true)
.setPeriodic(900000)
.build();
JobScheduler scheduler = (JobScheduler) getSystemService(JOB_SCHEDULER_SERVICE);
scheduler.schedule(info);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
final SharedPreferences.Editor edit = prefs.edit();
final Intent firstTime = new Intent(this, FirstTime.class);
if (prefs.getBoolean("firstTime", true)) {
// if (true) {
startActivity(firstTime);
finish();
}
edit.putInt("launchDev", prefs.getInt("launchDev", 0) + 1);
edit.apply();
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final Toolbar toolbar = findViewById(R.id.toolbar);
final AppBarLayout appbarlayout = findViewById(R.id.appbarlayout);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayShowTitleEnabled(false);
final TextView toolbarTxt = findViewById(R.id.toolbarTxt);
final LinearLayout bottomSheetRoot = findViewById(R.id.bottom_sheet);
final LinearLayout bottomSheet = findViewById(R.id.bottom_sheet_linear);
final TextView bottomSheetHeader = findViewById(R.id.bottom_sheet_header);
final TextView bottomSheetText = findViewById(R.id.bottom_sheet_text);
final View bottomNavDivider = findViewById(R.id.bottom_nav_divider);
bottomSheetBehaviour = BottomSheetBehavior.from(bottomSheetRoot);
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);
final BottomNavigationView bottomNav = findViewById(R.id.bottom_nav);
final Chip chip = findViewById(R.id.chip);
final CoordinatorLayout fragmentContainer = findViewById(R.id.fragment_container);
fragmentContainer.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
bottomSheetBehaviour.setState(BottomSheetBehavior.STATE_COLLAPSED);
}
});
final LinearLayout bottomSheetCloser = findViewById(R.id.bottom_sheet_closer);
bottomSheetBehaviour.setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() {
@Override
public void onStateChanged(@NonNull View bottomSheet, int newState) {
if (bottomSheetBehaviour.getState() == BottomSheetBehavior.STATE_EXPANDED) { // 2 = expanded, 4 = collapsed
bottomSheetCloser.setVisibility(View.VISIBLE);
}
if (bottomSheetBehaviour.getState() == BottomSheetBehavior.STATE_COLLAPSED) { // 2 = expanded, 4 = collapsed
bottomSheetCloser.setVisibility(View.GONE);
}
}
@Override
public void onSlide(@NonNull View bottomSheet, float slideOffset) {
}
});
if (!prefs.getBoolean("autoRefresh", false) && prefs.getInt("firstTimeOpening", 0) > 1) {
try {
final String OLD_FORMAT = "EEE, dd MMM yyyy HH:mm:ss zzz", NEW_FORMAT = "yyyy-MM-dd, HH:mm:ss";
String newDateString;
Date d = new Date(prefs.getString("time", ""));
SimpleDateFormat sdf = new SimpleDateFormat(OLD_FORMAT);
sdf.applyPattern(NEW_FORMAT);
newDateString = sdf.format(d);
View contextView = findViewById(R.id.coordination);
Snackbar snackbar = make(contextView, getText(R.string.lastupdated) + ": " + newDateString, Snackbar.LENGTH_LONG)
.setAction("Action", null);
snackbar.show();
} catch (IllegalArgumentException e) {
}
}
final Context context = this;
// TODO Huawei dialog
if (prefs.getBoolean("huaweiDeviceDialog", true)) {
// if (true) {
DeviceName.with(this).request(new DeviceName.Callback() {
@Override
public void onFinished(DeviceName.DeviceInfo info, Exception error) {
manufacturer = info.manufacturer;
marketName = info.marketName;
if (manufacturer.contains("Huawei") ||
manufacturer.contains("Honor") ||
manufacturer.contains("Xiaomi")) {
// if (true) {
AlertDialog.Builder alertDialog;
View dialogView = LayoutInflater.from(context).inflate(R.layout.secret_dialog, null);
TextView secretText = dialogView.findViewById(R.id.secrettext);
if (prefs.getInt("themeInt", 0) == 1) {
secretText.setTextColor(getResources().getColor(R.color.hintdark));
alertDialog = new AlertDialog.Builder(context, R.style.AlertDialogCustomDark);
} else {
secretText.setTextColor(getResources().getColor(R.color.hint));
alertDialog = new AlertDialog.Builder(context, R.style.AlertDialogCustomLight);
}
alertDialog.setTitle(R.string.chinaTitle);
TextView dialogText = dialogView.findViewById(R.id.dialogtext);
dialogText.setText(R.string.chinaDialog);
secretText.setText(R.string.orbuy);
Button searchbtn = dialogView.findViewById(R.id.searchbtn);
searchbtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(Intent.ACTION_WEB_SEARCH);
intent.putExtra(SearchManager.QUERY, marketName + " disable power optimisation");
startActivity(intent);
}
});
alertDialog.setView(dialogView);
alertDialog.show();
edit.putBoolean("huaweiDeviceDialog", false);
edit.apply();
}
}
});
}
ConnectivityManager connectivityManager = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState() == NetworkInfo.State.CONNECTED ||
connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState() == NetworkInfo.State.CONNECTED) {
} else {
View contextView = findViewById(R.id.coordination);
Snackbar.make(contextView, getText(R.string.nointernet), Snackbar.LENGTH_LONG).show();
}
bottomSheetCloser.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
bottomSheetCloser.setVisibility(View.GONE);
bottomSheetBehaviour.setState(BottomSheetBehavior.STATE_COLLAPSED);
}
});
// theme change
if (prefs.getInt("themeInt", 0) == 0) {
setTheme(R.style.AppTheme0);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
window.setStatusBarColor(ContextCompat.getColor(this, R.color.white));
window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
toolbar.setBackgroundColor(ContextCompat.getColor(this, R.color.white));
window.setNavigationBarColor(ContextCompat.getColor(this, R.color.white));
} else {
window.setStatusBarColor(ContextCompat.getColor(this, R.color.black));
window.setNavigationBarColor(ContextCompat.getColor(this, R.color.black));
}
toolbarTxt.setTextColor(ContextCompat.getColor(this, R.color.accent));
bottomNav.setBackgroundColor(ContextCompat.getColor(this, R.color.white));
chip.setChipBackgroundColor(getResources().getColorStateList(R.color.chip_state_list));
chip.setTextColor(ContextCompat.getColor(this, R.color.lessdark));
bottomSheet.setBackgroundColor(ContextCompat.getColor(this, R.color.white));
bottomSheetHeader.setTextColor(ContextCompat.getColor(this, R.color.lessdark));
bottomSheetText.setTextColor(ContextCompat.getColor(this, R.color.lessdark));
bottomNavDivider.setBackgroundColor(ContextCompat.getColor(this, R.color.lightgrey));
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.white));
setTaskDescription(taskDesc);
}
if (prefs.getInt("themeInt", 0) == 1) {
setTheme(R.style.AppTheme0Dark);
window.setStatusBarColor(ContextCompat.getColor(this, R.color.background));
window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE);
toolbar.setBackgroundColor(ContextCompat.getColor(this, R.color.dark));
toolbarTxt.setTextColor(ContextCompat.getColor(this, R.color.accent));
bottomNav.setBackgroundColor(ContextCompat.getColor(this, R.color.dark));
window.setNavigationBarColor(getResources().getColor(R.color.background));
chip.setChipBackgroundColor(getResources().getColorStateList(R.color.chip_state_list_dark));
chip.setTextColor(ContextCompat.getColor(this, R.color.lightgrey));
bottomSheet.setBackgroundColor(ContextCompat.getColor(this, R.color.dark));
bottomSheetHeader.setTextColor(ContextCompat.getColor(this, R.color.lightgrey));
bottomSheetText.setTextColor(ContextCompat.getColor(this, R.color.lightgrey));
bottomNavDivider.setBackgroundColor(ContextCompat.getColor(this, R.color.darkdivider));
Bitmap bm = BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher);
ActivityManager.TaskDescription taskDesc = new ActivityManager.TaskDescription(getString(R.string.app_name), bm, getResources().getColor(R.color.background));
setTaskDescription(taskDesc);
}
if (prefs.getBoolean("greeting", false)) {
if (!prefs.getString("username", "").isEmpty()) {
final Animation animationIn = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.chip_slide_in);
final Animation animationOut = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.chip_slide_out);
final Random generator = new Random();
Resources res = getResources();
String greetings[] = res.getStringArray(R.array.greeting8_array);
Calendar rightNow = Calendar.getInstance();
int currentHour = rightNow.get(Calendar.HOUR_OF_DAY);
switch (generator.nextInt(9)) {
case 0:
chip.setText(getString(R.string.greeting0, prefs.getString("username", "")));
break;
case 1:
chip.setText(getString(R.string.greeting1, prefs.getString("username", "")));
break;
case 2:
chip.setText(getString(R.string.greeting2, prefs.getString("username", "")));
break;
case 3:
chip.setText(getString(R.string.greeting3, prefs.getString("username", "")));
break;
case 4:
chip.setText(getString(R.string.greeting4, prefs.getString("username", "")));
break;
case 5:
chip.setText(getString(R.string.greeting5, prefs.getString("username", "")));
break;
case 6:
chip.setText(getString(R.string.greeting6, prefs.getString("username", "")));
break;
case 7:
chip.setText(getString(R.string.greeting7, prefs.getString("username", "")));
break;
case 8:
if (currentHour < 11) {
chip.setText(greetings[0] + prefs.getString("username", "") + ".");
} else if (currentHour > 10 && currentHour < 18) {
chip.setText(greetings[1] + prefs.getString("username", "") + ".");
} else if (currentHour > 17) {
chip.setText(greetings[2] + prefs.getString("username", "") + ".");
}
break;
}
final Handler chipIn = new Handler();
chipIn.postDelayed(new Runnable() {
@Override
public void run() {
chip.setVisibility(View.VISIBLE);
chip.startAnimation(animationIn);
}
}, 500);
final Handler chipOut = new Handler();
chipOut.postDelayed(new Runnable() {
@Override
public void run() {
chip.startAnimation(animationOut);
}
}, 3000);
animationOut.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation arg0) {}
@Override
public void onAnimationRepeat(Animation arg0) {}
@Override
public void onAnimationEnd(Animation arg0) {
chip.setVisibility(View.GONE);
}
});
}
}
if (prefs.getInt("firstTimeOpening", 0) < 2) {
// if (true) {
final Handler bsbIn = new Handler();
bsbIn.postDelayed(new Runnable() {
@Override
public void run() {
bottomSheetBehaviour.setState(BottomSheetBehavior.STATE_EXPANDED);
}
}, 600);
final Handler bsbOut = new Handler();
bsbOut.postDelayed(new Runnable() {
@Override
public void run() {
bottomSheetBehaviour.setState(BottomSheetBehavior.STATE_COLLAPSED);
}
}, 2000);
edit.putInt("firstTimeOpening", prefs.getInt("firstTimeOpening", 0) + 1);
edit.apply();
}
if (prefs.getBoolean("openInfo", false)) {
final Handler bsbIn = new Handler();
bsbIn.postDelayed(new Runnable() {
@Override
public void run() {
bottomSheetBehaviour.setState(BottomSheetBehavior.STATE_EXPANDED);
}
}, 600);
}
if (prefs.getBoolean("defaultPersonalised", false)) {
loadFragment(new FragmentPersonal());
bottomNav.setSelectedItemId(R.id.personal);
if (!prefs.getString("username", "").isEmpty()) {
if (Character.toString(prefs.getString("username", "").charAt(prefs.getString("username", "").length() - 1)).toLowerCase().equals("s")
|| Character.toString(prefs.getString("username", "").charAt(prefs.getString("username", "").length() - 1)).toLowerCase().equals("z")) {
toolbarTxt.setText(prefs.getString("username", "") + getString(R.string.nosplan));
} else {
toolbarTxt.setText(prefs.getString("username", "") + getString(R.string.splan));
}
} else {
toolbarTxt.setText(getString(R.string.personalplan));
}
} else if (!prefs.getBoolean("defaultPersonalised", false)) {
loadFragment(new FragmentPlan());
bottomNav.setSelectedItemId(R.id.plan);
toolbarTxt.setText(getString(R.string.app_name));
}
job();
bottomNav.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(MenuItem item) {
Fragment fragment = null;
switch (item.getItemId()) {
case R.id.plan:
fragment = new FragmentPlan();
toolbarTxt.setText(getString(R.string.app_name));
break;
case R.id.personal:
fragment = new FragmentPersonal();
if (!prefs.getString("username", "").isEmpty()) {
if (Character.toString(prefs.getString("username", "").charAt(prefs.getString("username", "").length() - 1)).toLowerCase().equals("s")
|| Character.toString(prefs.getString("username", "").charAt(prefs.getString("username", "").length() - 1)).toLowerCase().equals("x")
|| Character.toString(prefs.getString("username", "").charAt(prefs.getString("username", "").length() - 1)).toLowerCase().equals("z")) {
toolbarTxt.setText(prefs.getString("username", "") + getString(R.string.nosplan));
} else {
toolbarTxt.setText(prefs.getString("username", "") + getString(R.string.splan));
}
} else {
toolbarTxt.setText(getString(R.string.personalplan));
}
break;
// case R.id.search:
// fragment = new FragmentSearch();
// toolbarTxt.setText(getString(R.string.search));
// break;
case R.id.menu:
fragment = new FragmentFood();
toolbarTxt.setText(getString(R.string.foodmenu));
break;
case R.id.settings:
fragment = new FragmentSettings();
toolbarTxt.setText(getString(R.string.settings));
break;
}
appbarlayout.setExpanded(true);
bottomSheetBehaviour.setState(BottomSheetBehavior.STATE_COLLAPSED);
return loadFragment(fragment);
}
});
}
private boolean loadFragment(Fragment fragment) {
if (fragment != null) {
getSupportFragmentManager()
.beginTransaction()
// .setCustomAnimations(R.anim.fade_in, R.anim.fade_out) // TODO add proper animations
.replace(R.id.fragment_container, fragment)
.commit();
return true;
}
return false;
}
@Override
public void onBackPressed() {
if (bottomSheetBehaviour.getState() == BottomSheetBehavior.STATE_EXPANDED) {
bottomSheetBehaviour.setState(BottomSheetBehavior.STATE_COLLAPSED);
} else {
super.onBackPressed();
}
}
}
@@ -0,0 +1,46 @@
package com.denizd.substitutionplan;
import android.graphics.drawable.Drawable;
public class PlanCard {
private Drawable mIcon;
private String mGroup, mDate, mTime, mCourse, mRoom, mAdditional;
public PlanCard(Drawable icon, String group, String date, String time, String course, String room, String additional) {
mIcon = icon;
mGroup = group;
mDate = date;
mTime = time;
mCourse = course;
mRoom = room;
mAdditional = additional;
}
public Drawable getImageResource() {
return mIcon;
}
public String getGroup() {
return mGroup;
}
public String getDate() {
return mDate;
}
public String getTime() {
return mTime;
}
public String getCourse() {
return mCourse;
}
public String getRoom() {
return mRoom;
}
public String getAdditional() {
return mAdditional;
}
}
@@ -0,0 +1,354 @@
package com.denizd.substitutionplan;
import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.job.JobParameters;
import android.app.job.JobService;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Color;
import android.os.AsyncTask;
import android.os.Build;
import android.preference.PreferenceManager;
import com.madapps.prefrences.EasyPrefrences;
import androidx.core.app.NotificationCompat;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Set;
public class ScheduledJobService extends JobService {
private boolean jobCancelled = false;
Context context = this;
private SubstViewModel substViewModel;
@Override
public boolean onStartJob(JobParameters params) {
doBackgroundWork(params);
return true;
}
private void doBackgroundWork(final JobParameters params) {
final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
final SharedPreferences.Editor edit = prefs.edit();
substViewModel = new SubstViewModel(getApplication());
// substViewModel = ViewModelProviders.of().get(SubstViewModel.class);
// substViewModel.getAllSubst().observe(this, new Observer<List<Subst>>() {
// @Override
// public void onChanged(List<Subst> substs) {
new Thread(new Runnable() {
@Override
public void run() {
if (jobCancelled) {
return;
}
if (prefs.getBoolean("notif", false)) {
edit.putInt("notificationTestNumberDev", prefs.getInt("notificationTestNumberDev", 0) + 1);
edit.apply();
URL url;
URLConnection connection = null;
try {
url = new URL("https://djd4rkn355.github.io/subst");
connection = url.openConnection();
} catch (MalformedURLException e) {}
catch (IOException e) {}
try {
if ((!connection.getHeaderField("Last-Modified").equals(prefs.getString("time", "")))) {
// if (true) {
new fetcher(context).execute();
edit.putString("time", connection.getHeaderField("Last-Modified"));
edit.apply();
}
} catch (NullPointerException e1) {
}
}
jobFinished(params, false);
}
}).start();
// }
// });
}
@Override
public boolean onStopJob(JobParameters params) {
jobCancelled = true;
return true;
}
private class fetcher extends AsyncTask<Void, Void, Void> {
private int count = 0, columns = 0, pCount = 0, priority = 200;
Context mContext;
String notifText = "", foodInfo = "", informational = "";
String[] groupS, dateS, timeS, courseS, roomS, additionalS;
boolean attempt = false, emptyIcon;
URL url;
URLConnection connection;
String modified;
Elements rows, paragraphs;
Elements[] paragraphsFood = new Elements[2];
Elements foodElements;
Element[] dateFood = new Element[2], blockFood = new Element[2];
Document doc, docFood;
NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
String channelId = "general";
CharSequence channelName = getText(R.string.general);
int importance = NotificationManager.IMPORTANCE_DEFAULT;
NotificationChannel channel;
final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
final SharedPreferences.Editor edit = prefs.edit();
protected fetcher(Context mContext) {
this.mContext = mContext;
}
@Override
protected Void doInBackground(Void... params) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
channel = new NotificationChannel(channelId, channelName, importance);
channel.enableLights(true);
channel.setLightColor(Color.BLUE);
manager.createNotificationChannel(channel);
}
try {
doc = Jsoup.connect("https://djd4rkn355.github.io/subst").get();
url = new URL("https://djd4rkn355.github.io/subst");
connection = url.openConnection();
rows = doc.select("tr");
count = rows.size();
docFood = Jsoup.connect("https://djd4rkn355.github.io/food.html").get();
foodElements = docFood.select("th");
paragraphs = doc.select("p");
pCount = paragraphs.size();
for (int i = 0; i < pCount; i++) {
if (i == 0) {
informational = paragraphs.get(i).text();
} else {
informational += "\n\n" + paragraphs.get(i).text();
}
}
edit.putString("informational", informational);
edit.apply();
attempt = true;
modified = connection.getHeaderField("Last-Modified");
} catch (IOException e1) {
e1.printStackTrace();
}
groupS = new String[count];
dateS = new String[count];
timeS = new String[count];
courseS = new String[count];
roomS = new String[count];
additionalS = new String[count];
if (attempt) {
EasyPrefrences easyPrefs = new EasyPrefrences(context);
ArrayList<String> foodList = new ArrayList<>();
for (int foodInt = 0; foodInt < foodElements.size(); foodInt++) {
try {
if (foodElements.get(foodInt).text().contains("Montag") ||
foodElements.get(foodInt).text().contains("Dienstag") ||
foodElements.get(foodInt).text().contains("Mittwoch") ||
foodElements.get(foodInt).text().contains("Donnerstag") ||
foodElements.get(foodInt).text().contains("Freitag")) {
if (foodElements.get(foodInt + 3).text().contains("Montag") ||
foodElements.get(foodInt + 3).text().contains("Dienstag") ||
foodElements.get(foodInt + 3).text().contains("Mittwoch") ||
foodElements.get(foodInt + 3).text().contains("Donnerstag") ||
foodElements.get(foodInt + 3).text().contains("Freitag") ||
foodElements.get(foodInt + 3).text().contains("von")) {
foodList.add(foodElements.get(foodInt).text() + "\n" + foodElements.get(foodInt + 1).text() + "\n" + foodElements.get(foodInt + 2).text());
foodInt += 2;
} else if (foodElements.get(foodInt + 2).text().contains("Montag") ||
foodElements.get(foodInt + 2).text().contains("Dienstag") ||
foodElements.get(foodInt + 2).text().contains("Mittwoch") ||
foodElements.get(foodInt + 2).text().contains("Donnerstag") ||
foodElements.get(foodInt + 2).text().contains("Freitag") ||
foodElements.get(foodInt + 2).text().contains("von")) {
foodList.add(foodElements.get(foodInt).text() + "\n" + foodElements.get(foodInt + 1).text());
foodInt += 1;
}
} else {
foodList.add(foodElements.get(foodInt).text());
}
} catch (IndexOutOfBoundsException e) {
try {
foodList.add(foodElements.get(foodInt).text() + "\n" + foodElements.get(foodInt + 1).text() + "\n" + foodElements.get(foodInt + 2).text());
break;
} catch (IndexOutOfBoundsException e1) {
foodList.add(foodElements.get(foodInt).text() + "\n" + foodElements.get(foodInt + 1).text());
break;
}
}
}
easyPrefs.putListString("foodListPrefs", foodList);
if (substViewModel != null) {
substViewModel.deleteAllSubst();
}
for (int i = 0; i < count; i++) {
Element row = rows.get(i);
Elements cols = row.select("th");
groupS[i] = cols.get(0).text();
dateS[i] = cols.get(1).text();
timeS[i] = cols.get(2).text();
courseS[i] = cols.get(3).text();
roomS[i] = cols.get(4).text();
additionalS[i] = cols.get(5).text();
int drawable = icons(courseS[i]);
Subst subst = new Subst(drawable, groupS[i], dateS[i], timeS[i], courseS[i], roomS[i], additionalS[i], priority);
priority--;
substViewModel.insert(subst);
// for juniors
if (prefs.getString("courses", "").isEmpty() && !prefs.getString("classes", "").isEmpty()) {
if (!groupS[i].isEmpty() && !groupS[i].equals("")) {
if (prefs.getString("classes", "").contains(groupS[i]) || groupS[i].contains(prefs.getString("classes", ""))) {
if (!notifText.isEmpty()) {
notifText += ", ";
}
notifText += courseS[i] + ": " + additionalS[i];
}
}
}
// for seniors
else if (!prefs.getString("courses", "").isEmpty() && !prefs.getString("classes", "").isEmpty()) {
if (!groupS[i].equals("") && !courseS[i].equals("")) {
if (prefs.getString("courses", "").contains(courseS[i])) {
if (prefs.getString("classes", "").contains(groupS[i]) || groupS[i].contains(prefs.getString("classes", ""))) {
if (!notifText.isEmpty()) {
notifText += ", ";
}
notifText += courseS[i] + ": " + additionalS[i];
}
}
}
}
}
Intent openApp = new Intent(getApplicationContext(), MainActivity.class);
openApp.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
PendingIntent openAppPending = PendingIntent.getActivity(mContext, 0, openApp, 0);
if (!notifText.isEmpty()) {
Notification notification = null;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
notification = new NotificationCompat.Builder(mContext)
.setContentTitle(getString(R.string.subst))
.setStyle(new NotificationCompat.BigTextStyle()
.bigText(notifText))
.setSmallIcon(R.drawable.ic_avh)
.setChannelId(channelId)
.setContentIntent(openAppPending)
.setAutoCancel(true)
.build();
} else {
notification = new NotificationCompat.Builder(mContext)
.setContentTitle(getString(R.string.subst))
.setStyle(new NotificationCompat.BigTextStyle()
.bigText(notifText))
.setSmallIcon(R.drawable.ic_avh)
.setContentIntent(openAppPending)
.setAutoCancel(true)
.build();
}
manager.notify(1, notification);
}
}
return null;
}
private int icons(String course) {
emptyIcon = false;
if (course.toLowerCase().contains("deu") || course.toLowerCase().contains("dep") || course.toLowerCase().contains("daz")) {
return R.drawable.ic_german;
} else if (course.toLowerCase().contains("mat") || course.toLowerCase().contains("map")) {
return R.drawable.ic_maths;
} else if (course.toLowerCase().contains("eng") || course.toLowerCase().contains("enp") || course.toLowerCase().contains("ena")) {
return R.drawable.ic_english;
} else if (course.toLowerCase().contains("spo") || course.toLowerCase().contains("spp") || course.toLowerCase().contains("spth")) {
return R.drawable.ic_pe;
} else if (course.toLowerCase().contains("pol") || course.toLowerCase().contains("pop")) {
return R.drawable.ic_politics;
} else if (course.toLowerCase().contains("dar") || course.toLowerCase().contains("dap")) {
return R.drawable.ic_drama;
} else if (course.toLowerCase().contains("phy") || course.toLowerCase().contains("php")) {
return R.drawable.ic_physics;
} else if (course.toLowerCase().contains("bio") || course.toLowerCase().contains("bip") || course.toLowerCase().contains("nw")) {
return R.drawable.ic_biology;
} else if (course.toLowerCase().contains("che") || course.toLowerCase().contains("chp")) {
return R.drawable.ic_chemistry;
} else if (course.toLowerCase().contains("phi") || course.toLowerCase().contains("psp")) {
return R.drawable.ic_philosophy;
} else if (course.toLowerCase().contains("laa") || course.toLowerCase().contains("laf") || course.toLowerCase().contains("lat")) {
return R.drawable.ic_latin;
} else if (course.toLowerCase().contains("spa") || course.toLowerCase().contains("spf")) {
return R.drawable.ic_spanish;
} else if (course.toLowerCase().contains("fra") || course.toLowerCase().contains("frf") || course.toLowerCase().contains("frz")) {
return R.drawable.ic_french;
} else if (course.toLowerCase().contains("inf")) {
return R.drawable.ic_compsci;
} else if (course.toLowerCase().contains("ges")) {
return R.drawable.ic_history;
} else if (course.toLowerCase().contains("rel")) {
return R.drawable.ic_religion;
} else if (course.toLowerCase().contains("geg") || course.toLowerCase().contains("wuk")) {
return R.drawable.ic_geography;
} else if (course.toLowerCase().contains("kun")) {
return R.drawable.ic_arts;
} else if (course.toLowerCase().contains("mus")) {
return R.drawable.ic_music;
} else if (course.toLowerCase().contains("tue")) {
return R.drawable.ic_turkish;
} else if (course.toLowerCase().contains("chi")) {
return R.drawable.ic_chinese;
} else if (course.toLowerCase().contains("gll")) {
return R.drawable.ic_gll;
} else if (course.toLowerCase().contains("wat")) {
return R.drawable.ic_wat;
} else if (course.toLowerCase().contains("för")) {
return R.drawable.ic_help;
} else if (course.toLowerCase().contains("wp") || course.toLowerCase().contains("met")) {
return R.drawable.ic_pencil;
} else {
emptyIcon = true;
return R.drawable.ic_empty;
}
}
@Override
protected void onPostExecute(Void result) {}
}
}
@@ -0,0 +1,68 @@
package com.denizd.substitutionplan;
import android.graphics.drawable.Drawable;
import androidx.room.Entity;
import androidx.room.PrimaryKey;
@Entity(tableName = "subst_table")
public class Subst {
@PrimaryKey(autoGenerate = true)
private int id;
private int icon;
private String group, date, time, course, room, additional;
private int priority;
public Subst(int icon, String group, String date, String time, String course, String room, String additional, int priority) {
this.icon = icon;
this.group = group;
this.date = date;
this.time = time;
this.course = course;
this.room = room;
this.additional = additional;
this.priority = priority;
}
public void setId(int id) {
this.id = id;
}
public int getId() {
return id;
}
public int getIcon() {
return icon;
}
public String getGroup() {
return group;
}
public String getDate() {
return date;
}
public String getTime() {
return time;
}
public String getCourse() {
return course;
}
public String getRoom() {
return room;
}
public String getAdditional() {
return additional;
}
public int getPriority() {
return priority;
}
}
@@ -0,0 +1,29 @@
package com.denizd.substitutionplan;
import java.util.List;
import androidx.lifecycle.LiveData;
import androidx.room.Dao;
import androidx.room.Delete;
import androidx.room.Insert;
import androidx.room.Query;
import androidx.room.Update;
@Dao
public interface SubstDao {
@Insert
void insert(Subst subst);
@Update
void update(Subst subst);
@Delete
void delete(Subst subst);
@Query("DELETE FROM subst_table")
void deleteAllSubst();
@Query("SELECT * FROM subst_table ORDER BY priority DESC")
LiveData<List<Subst>> getAllSubst();
}
@@ -0,0 +1,52 @@
package com.denizd.substitutionplan;
import android.content.Context;
import android.os.AsyncTask;
import androidx.annotation.NonNull;
import androidx.room.Database;
import androidx.room.Room;
import androidx.room.RoomDatabase;
import androidx.sqlite.db.SupportSQLiteDatabase;
@Database(entities = {Subst.class}, version = 2, exportSchema = false)
public abstract class SubstDatabase extends RoomDatabase {
private static SubstDatabase instance;
public abstract SubstDao substDao();
public static synchronized SubstDatabase getInstance(Context context) {
if (instance == null) {
instance = Room.databaseBuilder(context.getApplicationContext(),
SubstDatabase.class,
"subst_database")
.fallbackToDestructiveMigration()
.build();
}
return instance;
}
// private static RoomDatabase.Callback roomCallback = new RoomDatabase.Callback() { // initial population
// @Override
// public void onCreate(@NonNull SupportSQLiteDatabase db) {
// super.onCreate(db);
// new PopulateDBAsync(instance).execute();
// }
// };
//
// private static class PopulateDBAsync extends AsyncTask<Void, Void, Void> {
//
// private SubstDao substDao;
//
// private PopulateDBAsync(SubstDatabase db) {
// substDao = db.substDao();
// }
//
// @Override
// protected Void doInBackground(Void... voids) {
// substDao.insert(new Subst(R.drawable.ic_avh,"Group", "Date", "Time", "Course", "Room", "Additional", 0));
// return null;
// }
// }
}
@@ -0,0 +1,96 @@
package com.denizd.substitutionplan;
import android.app.Application;
import android.os.AsyncTask;
import java.util.List;
import androidx.lifecycle.LiveData;
public class SubstRepository {
private SubstDao substDao;
private LiveData<List<Subst>> allSubst;
public SubstRepository(Application application) {
SubstDatabase database = SubstDatabase.getInstance(application);
substDao = database.substDao();
allSubst = substDao.getAllSubst();
}
public void insert(Subst subst) {
new InsertSubstAsync(substDao).execute(subst);
}
public void update(Subst subst) {
new UpdateSubstAsync(substDao).execute(subst);
}
public void delete(Subst subst) {
new DeleteSubstAsync(substDao).execute(subst);
}
public void deleteAllSubst() {
new DeleteAllSubstAsync(substDao).execute();
}
public LiveData<List<Subst>> getAllSubst() {
return allSubst;
}
private static class InsertSubstAsync extends AsyncTask<Subst, Void, Void> {
private SubstDao substDao;
private InsertSubstAsync(SubstDao substDao) {
this.substDao = substDao;
}
@Override
protected Void doInBackground(Subst... substs) {
substDao.insert(substs[0]);
return null;
}
}
private static class UpdateSubstAsync extends AsyncTask<Subst, Void, Void> {
private SubstDao substDao;
private UpdateSubstAsync(SubstDao substDao) {
this.substDao = substDao;
}
@Override
protected Void doInBackground(Subst... substs) {
substDao.update(substs[0]);
return null;
}
}
private static class DeleteSubstAsync extends AsyncTask<Subst, Void, Void> {
private SubstDao substDao;
private DeleteSubstAsync(SubstDao substDao) {
this.substDao = substDao;
}
@Override
protected Void doInBackground(Subst... substs) {
substDao.delete(substs[0]);
return null;
}
}
private static class DeleteAllSubstAsync extends AsyncTask<Void, Void, Void> {
private SubstDao substDao;
private DeleteAllSubstAsync(SubstDao substDao) {
this.substDao = substDao;
}
@Override
protected Void doInBackground(Void... voids) {
substDao.deleteAllSubst();
return null;
}
}
}
@@ -0,0 +1,41 @@
package com.denizd.substitutionplan;
import android.app.Application;
import java.util.List;
import androidx.annotation.NonNull;
import androidx.lifecycle.AndroidViewModel;
import androidx.lifecycle.LiveData;
public class SubstViewModel extends AndroidViewModel {
private SubstRepository repository;
private LiveData<List<Subst>> allSubst;
public SubstViewModel(@NonNull Application application) {
super(application);
repository = new SubstRepository(application);
allSubst = repository.getAllSubst();
}
public void insert(Subst subst) {
repository.insert(subst);
}
public void update(Subst subst) {
repository.update(subst);
}
public void delete(Subst subst) {
repository.delete(subst);
}
public void deleteAllSubst() {
repository.deleteAllSubst();
}
public LiveData<List<Subst>> getAllSubst() {
return allSubst;
}
}
@@ -0,0 +1,26 @@
package com.denizd.substitutionplan;
public class names {
protected static String boy[] = { "Cedric Grislawski", // excluded are most boys from Physical Education
// profile (no offense) and me
"Dawid Kniola", "Jonas Köstergarten", "Jakob Moerschner", "Siamak Nemati", "Hendrik Plönnings",
"Jan Rohmann", "Anton Rosenberger", "Christoph Senft", "Jan Mika Sieckendieck", "Alexander Sinaj",
"Nico Tischer", "Nhat Vinh Tran", "Leon Becker", "Youssef Beltagi", "Erich Kerkesner", "Alex Lick",
"Oskar Piskorz", "Theo Recktor", "Eray Vatansever", "Dennis Wojciechowski", "Übeydullah Alkan",
"Yahya Almarashli", "Sinan Aydin", "Rick Büteröwe", "Levin Dropp", "Silvester Jermolajew", "Tolgay Kekilli",
"Dennis Lange", "Aras Mahmoud", "Batuhan Özcan", "Michael Rek", "Khabat Sharif", "Anbinh Tran",
"Bastian Westerboer", "Abdulwahab Alshebli", "Kelechi Gaius", "Armin Großmann", "Anes Halep",
"Marco Jankowski", "Emirhan Kaplan", "Alexander Kofmann", "Tobi Derek Köhler", "Vasilije Nedeljkovic",
"Batu Öcal", "Paul Rehbohm" };
protected static String girl[] = { "Mayra Dronia", // excluded are the girls from Physical Education profile
// (no offense)
"Shalin Ramadan", "Nigina Amin", "Mariya Kheder", "Niegen Khosrawi", "Dayana Osipova",
"Julia Petri", "Laura Pister", "Dana Alyoussef", "Ilkem Kahramanoglu", "Rozita Amiri", "Mirja Arneke",
"Nastasja Banik", "Anni Kienke", "Benedite Mateta", "Leonie Pohl", "Cecillia Sawires", "Patrycja Smółka",
"Elif Zencirkiran", "Nusyba Al Semadi", "Vivien Bruns", "Yasemin Dal", "Svenja Demuth", "Nina Groß",
"Kim Lahmeyer", "Luca Minschke", "Kim Reschke", "Amélie Schnellecke", "Delal Secer", "Xenia Segijanski",
"Melisa Tas", "Kim Völker", "Banu Yari", "Zeinab Ali", "Mariam Bannout", "Stefanie Fahl", "Yamaty Gaye",
"Anna-Sophia Haeberle", "Finja Hastedt", "Viktoria Hammermeister", "Isabel Horn", "Laura Kern",
"Melanie Kleinermann", "Målin Kollhoff", "Darja Maier", "Lisa Maier", "Naura Nadzifah", "Janina Roelfs",
"Vanessa Scheifler", "Mara Thies", "Lieli Umar", "Leonie Welk", "Betraben Yacoub" };
}
+20
View File
@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_interpolator"
android:ordering="sequentially"
android:shareInterpolator="false">
<!-- Step 1 -->
<objectAnimator
android:duration="@android:integer/config_shortAnimTime"
android:propertyName="pathData"
android:valueFrom="M6.5,12 l0,0 l0,0"
android:valueTo="M6.5,12 l3.5,4 l0,0"
android:valueType="pathType" />
<!-- Step 2 -->
<objectAnimator
android:duration="@android:integer/config_shortAnimTime"
android:propertyName="pathData"
android:valueFrom="M6.5,12 l3.5,4 l0,0"
android:valueTo="M6.5,12 l3.5,4 l8,-7"
android:valueType="pathType" />
</set>
+9
View File
@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="@android:integer/config_longAnimTime"
android:interpolator="@android:anim/overshoot_interpolator">
<translate
android:fromXDelta="-150%"
android:toXDelta="0"/>
</set>
+9
View File
@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="@android:integer/config_longAnimTime"
android:interpolator="@android:anim/anticipate_interpolator">
<translate
android:fromXDelta="0%"
android:toXDelta="-150%"/>
</set>
+9
View File
@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="300"
android:interpolator="@android:anim/accelerate_decelerate_interpolator">
<alpha
android:fromAlpha="0.0"
android:toAlpha="1.0">
</alpha>
</set>
+9
View File
@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="@android:integer/config_mediumAnimTime"
android:interpolator="@android:anim/linear_interpolator">
<alpha
android:fromAlpha="1.0"
android:toAlpha="0.0">
</alpha>
</set>
+9
View File
@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="300"
android:interpolator="@android:anim/accelerate_decelerate_interpolator">
<alpha
android:fromAlpha="1.0"
android:toAlpha="0.0">
</alpha>
</set>
@@ -0,0 +1,27 @@
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="@android:integer/config_shortAnimTime">
<translate
android:fromYDelta="-20%"
android:toYDelta="0"
android:interpolator="@android:anim/decelerate_interpolator"
/>
<alpha
android:fromAlpha="0"
android:toAlpha="1"
android:interpolator="@android:anim/decelerate_interpolator"
/>
<scale
android:fromXScale="105%"
android:fromYScale="105%"
android:toXScale="100%"
android:toYScale="100%"
android:pivotX="50%"
android:pivotY="50%"
android:interpolator="@android:anim/decelerate_interpolator"
/>
</set>
@@ -0,0 +1,27 @@
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="@android:integer/config_shortAnimTime">
<translate
android:fromYDelta="0"
android:toYDelta="-20%"
android:interpolator="@android:anim/decelerate_interpolator"
/>
<alpha
android:fromAlpha="1"
android:toAlpha="0"
android:interpolator="@android:anim/decelerate_interpolator"
/>
<scale
android:fromXScale="100%"
android:fromYScale="100%"
android:toXScale="105%"
android:toYScale="105%"
android:pivotX="50%"
android:pivotY="50%"
android:interpolator="@android:anim/decelerate_interpolator"
/>
</set>
@@ -0,0 +1,27 @@
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="125">
<translate
android:fromYDelta="-20%"
android:toYDelta="0"
android:interpolator="@android:anim/decelerate_interpolator"
/>
<alpha
android:fromAlpha="0"
android:toAlpha="1"
android:interpolator="@android:anim/decelerate_interpolator"
/>
<scale
android:fromXScale="105%"
android:fromYScale="105%"
android:toXScale="100%"
android:toYScale="100%"
android:pivotX="50%"
android:pivotY="50%"
android:interpolator="@android:anim/decelerate_interpolator"
/>
</set>
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<layoutAnimation
xmlns:android="http://schemas.android.com/apk/res/android"
android:animation="@anim/item_animation_fall_down"
android:delay="15%"
android:animationOrder="normal"/>
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<layoutAnimation
xmlns:android="http://schemas.android.com/apk/res/android"
android:animation="@anim/item_animation_fall_down_out"
android:delay="15%"
android:animationOrder="normal"/>
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<layoutAnimation
xmlns:android="http://schemas.android.com/apk/res/android"
android:animation="@anim/item_animation_fall_down_quick"
android:delay="6%"
android:animationOrder="normal"/>
+6
View File
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<layoutAnimation
xmlns:android="http://schemas.android.com/apk/res/android"
android:animation="@anim/fade_in"
android:delay="15%"
android:animationOrder="normal"/>
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="true" android:color="?attr/colorAccent" />
<item android:state_checked="false" android:color="?attr/referenceTextColor" />
</selector>
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="@color/colorChipLight" android:state_checked="true" />
<item android:color="@color/colorChipLight" />
</selector>
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="@color/colorChipDark" android:state_checked="true" />
<item android:color="@color/colorChipDark" />
</selector>
Binary file not shown.

After

Width:  |  Height:  |  Size: 412 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 289 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

@@ -0,0 +1,22 @@
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"
android:opacity="opaque">
<item android:drawable="?attr/colorAccent"/>
<item>
<bitmap
android:src="@drawable/avhbmp"
android:gravity="center"
android:scaleType="centerInside"/>
</item>
<!--<item android:drawable="@drawable/ic_avhlogo"-->
<!--android:gravity="center"-->
<!--android:scaleType="centerInside">-->
<!--</item>-->
<!--android:gravity="fill_horizontal|center_vertical"-->
<!--android:scaleType="centerInside"-->
</layer-list>
@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- The android:opacity=”opaque” line — this is critical in preventing a flash of black as your theme transitions. -->
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" android:opacity="opaque">
<!-- The background color, preferably the same as your normal theme -->
<item android:drawable="?attr/colorAccent"/>
<!-- Your product logo - 144dp color version of your app icon -->
<!--<item>-->
<!--<bitmap android:src="@drawable/ic_avh"-->
<!--android:gravity="center"/>-->
<!--</item>-->
<item android:drawable="@drawable/ic_avhlogo"
android:gravity="center"
android:scaleType="centerInside">
</item>
</layer-list>
Binary file not shown.

After

Width:  |  Height:  |  Size: 522 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 765 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<animated-vector xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/check_mark">
<target
android:name="tick"
android:animation="@anim/check_animation" />
</animated-vector>
+20
View File
@@ -0,0 +1,20 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportHeight="24.0"
android:viewportWidth="24.0">
<group android:name="background">
<path
android:name="circle"
android:fillColor="#448aff"
android:pathData="M12,12m-10,0a10,10 0,1 1,20 0a10,10 0,1 1,-20 0" />
</group>
<group android:name="check">
<path
android:name="tick"
android:pathData="M6.5,12 l0,0 l0,0"
android:strokeColor="#FFFFFF"
android:strokeWidth="1" />
</group>
</vector>
+4
View File
@@ -0,0 +1,4 @@
<vector android:height="24dp" android:viewportHeight="511.73535"
android:viewportWidth="511" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#FF000000" android:pathData="m405.035,255.867c0,-75.734 -118.934,-230.402 -132.535,-247.734 -8.535,-10.668 -25.066,-10.668 -33.602,0 -13.598,17.332 -132.531,172 -132.531,247.734 0,40.266 16.266,78.664 45.066,106.664h-23.734v42.668h42.668v106.668h42.668v-106.668h85.332v106.668h42.668v-106.668h42.664v-42.668h-23.734c28.801,-28 45.07,-66.398 45.07,-106.664zM255.699,56.398c24.801,33.602 48,68.801 69.066,104.801 -16.531,12 -26.398,31.199 -26.398,51.734v21.332c0,11.734 -9.602,21.332 -21.332,21.332 -11.734,0 -21.336,-9.598 -21.336,-21.332v-21.332c0,-34.402 -27.465,-62.668 -61.867,-64 19.203,-31.734 41.602,-65.066 61.867,-92.535zM149.035,255.867c0,-15.199 8.266,-38.133 21.332,-64h21.332c11.734,0 21.336,9.598 21.336,21.332v21.332c0,35.469 28.531,64 64,64 35.465,0 64,-28.531 64,-64v-21.332c0,-4.531 1.598,-9.066 4.266,-12.801 10.398,22.402 17.066,41.867 17.066,55.469 0,58.934 -47.734,106.664 -106.668,106.664 -58.934,0 -106.664,-47.73 -106.664,-106.664zM149.035,255.867"/>
</vector>
+5
View File
@@ -0,0 +1,5 @@
<vector android:height="120dp" android:viewportHeight="26.073"
android:viewportWidth="54.31" android:width="250dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#FFFFFF"
android:pathData="m0.642,26.05c-0.1793,-0.0546 -0.3227,-0.1912 -0.423,-0.4034 -0.0868,-0.1835 -0.1299,-0.3499 -0.18,-0.6953 -0.0644,-0.4438 -0.0501,-2.2083 0.0447,-5.5298 0.0442,-1.5476 0.0862,-2.9233 0.0933,-3.0572l0.013,-0.2434 0.1555,-0.0798c0.0855,-0.0439 0.351,-0.1848 0.59,-0.313 0.6131,-0.329 1.3794,-0.7385 1.597,-0.8535 0.1016,-0.0537 0.2971,-0.1587 0.4346,-0.2334 0.1374,-0.0747 0.3525,-0.1897 0.478,-0.2556 0.5334,-0.2802 1.5092,-0.8133 1.8615,-1.017 0.1116,-0.0645 0.2961,-0.1712 0.4099,-0.237 0.2127,-0.123 0.2696,-0.157 0.4011,-0.2397 0.0418,-0.0263 0.1543,-0.0937 0.2499,-0.1497 0.5553,-0.3255 1.6814,-1.0279 2.6508,-1.6533 0.0597,-0.0386 0.1966,-0.1268 0.3042,-0.1961 1.5001,-0.9666 3.6523,-2.4484 4.954,-3.4109 0.3582,-0.2649 1.7314,-1.2221 2.6279,-1.8318 0.7716,-0.5248 2.8139,-1.8787 3.0062,-1.9929 0.0394,-0.0234 0.2252,-0.1412 0.4128,-0.2616s0.4487,-0.2859 0.5801,-0.3677c0.1315,-0.0817 0.3026,-0.1893 0.3802,-0.239 0.2592,-0.1659 1.2231,-0.7326 1.7869,-1.0506 0.5592,-0.3154 1.4818,-0.7903 1.8091,-0.9313 0.6104,-0.2629 1.1407,-0.4489 1.5055,-0.5279 0.1138,-0.0247 0.214,-0.0492 0.2227,-0.0546 0.0322,-0.0199 0.8012,-0.1391 1.0422,-0.1616 0.979,-0.0913 3.2692,-0.0911 4.313,0.0003 1.4035,0.123 2.2951,0.4492 2.6451,0.9679 0.165,0.2444 0.2002,0.3755 0.2007,0.7474 0.0006,0.411 -0.0696,0.716 -0.284,1.2338 -0.3755,0.907 -1.5233,2.5827 -2.7325,3.9889 -0.9585,1.1147 -1.8375,2.4001 -2.4388,3.5662 -0.2381,0.4618 -0.346,0.7207 -0.5387,1.2928 -0.4305,1.2778 -0.4186,1.6374 0.0757,2.2952 0.4236,0.5637 0.9046,0.8012 1.9082,0.9422 0.0887,0.0125 0.3794,0.0227 0.646,0.0227 1.0896,0 2.4249,-0.253 3.886,-0.7363 0.3467,-0.1147 1.0184,-0.3616 1.2494,-0.4593 0.0538,-0.0227 0.1955,-0.0816 0.3151,-0.1309 0.3765,-0.1551 0.5845,-0.2417 0.6518,-0.2713 0.0358,-0.0158 0.163,-0.0696 0.2825,-0.1195 0.1195,-0.05 0.3102,-0.1304 0.4237,-0.1786 0.1135,-0.0483 0.2895,-0.1216 0.3911,-0.1629 0.1016,-0.0413 0.2433,-0.0998 0.3151,-0.1299 0.0717,-0.0301 0.1988,-0.0819 0.2825,-0.115 0.0837,-0.0331 0.2743,-0.1087 0.4237,-0.168 0.6645,-0.2636 0.8709,-0.3322 1.1652,-0.3875 0.4255,-0.0799 0.6165,0.0135 0.6831,0.3339 0.016,0.0772 0.028,0.4053 0.0319,0.8732 0.0065,0.7894 0.0264,1.0214 0.1199,1.401 0.1968,0.799 0.5825,1.2477 1.3058,1.5194 0.3784,0.1421 1.0799,0.2763 1.6675,0.3188 0.3938,0.0285 1.8687,0.0141 2.2077,-0.0216 1.7553,-0.1848 3.1116,-0.488 4.4108,-0.9862 0.2568,-0.0985 0.7865,-0.3131 0.8691,-0.3522 0.0901,-0.0426 0.2578,-0.1131 0.4128,-0.1737 0.0717,-0.028 0.2135,-0.0867 0.3151,-0.1303 0.1016,-0.0437 0.2433,-0.1025 0.3151,-0.1308 0.0717,-0.0282 0.2135,-0.0867 0.3151,-0.13 0.1016,-0.0433 0.2433,-0.1017 0.3151,-0.13 0.0717,-0.0282 0.2128,-0.0862 0.3135,-0.1288 0.1007,-0.0426 0.1877,-0.0729 0.1932,-0.0674 0.0104,0.0104 0.0053,0.0676 -0.1055,1.1898 -0.071,0.7187 -0.1146,0.9429 -0.2464,1.2663 -0.2098,0.5145 -0.7032,1.0472 -1.5039,1.6232 -0.1778,0.1279 -0.9153,0.6186 -1.0884,0.7241 -1.8174,1.1078 -2.509,1.4324 -3.5921,1.6858 -0.8303,0.1943 -2.059,0.2746 -3.8024,0.2487 -0.9463,-0.0141 -1.1963,-0.026 -1.8252,-0.0868 -0.591,-0.0572 -0.9542,-0.126 -1.3471,-0.2555 -0.4719,-0.1555 -0.6843,-0.2909 -1.1215,-0.7153 -0.1842,-0.1788 -0.387,-0.3584 -0.4505,-0.3991 -0.3994,-0.2555 -0.8111,-0.2864 -1.6111,-0.1208 -0.2518,0.0521 -0.825,0.1934 -1.1081,0.2733 -0.1076,0.0303 -0.3178,0.0881 -0.4672,0.1285 -0.1494,0.0404 -0.4036,0.109 -0.5649,0.1527 -1.0207,0.2759 -2.3356,0.5132 -3.3678,0.6077 -0.9254,0.0847 -2.1742,0.0853 -3.0001,0.001 -0.3103,-0.0315 -1.0002,-0.1322 -1.063,-0.1551 -0.0179,-0.007 -0.1499,-0.0358 -0.2933,-0.0649 -0.1434,-0.0292 -0.3487,-0.0781 -0.4563,-0.1087 -0.2615,-0.0744 -0.886,-0.2842 -0.9973,-0.335 -0.049,-0.0224 -0.1498,-0.0657 -0.224,-0.0963 -0.598,-0.2465 -1.384,-0.7544 -1.8513,-1.1964 -0.9436,-0.8924 -1.3564,-2.0681 -1.2817,-3.6505 0.0193,-0.4081 0.0205,-0.4203 0.0997,-0.9778 0.1124,-0.7911 0.0607,-1.4115 -0.1259,-1.5114 -0.0853,-0.0457 -0.3493,0.0288 -0.7149,0.2015 -0.3416,0.1614 -1.1258,0.5975 -1.4555,0.8094 -0.0418,0.0269 -0.2374,0.1503 -0.4346,0.2742 -0.4157,0.2612 -1.416,0.9297 -1.8686,1.2487 -0.0418,0.0295 -0.1215,0.0853 -0.177,0.1239 -0.0555,0.0387 -0.2154,0.1535 -0.3552,0.255 -0.1399,0.1016 -0.2949,0.2135 -0.3445,0.2487 -0.4102,0.291 -1.4365,1.0783 -2.1109,1.6191 -1.4979,1.2014 -2.884,2.2429 -4.237,3.184 -0.1817,0.1264 -1.0192,0.686 -1.2494,0.8348 -0.4025,0.2603 -0.5367,0.3456 -0.5975,0.3799 -0.0358,0.0202 -0.1727,0.1041 -0.3042,0.1866 -0.1314,0.0824 -0.3172,0.1957 -0.4128,0.2518 -0.0956,0.0561 -0.208,0.1241 -0.2499,0.1512 -0.1088,0.0703 -0.5731,0.339 -0.8909,0.5155 -0.1494,0.083 -0.2814,0.1585 -0.2933,0.1677 -0.0307,0.0238 -0.8824,0.4882 -1.195,0.6517 -0.1434,0.075 -0.3292,0.1731 -0.4128,0.2181 -0.4406,0.2368 -2.7812,1.4179 -3.0311,1.5296 -0.0777,0.0347 -0.1999,0.0901 -0.2716,0.1232 -0.3531,0.1628 -0.8439,0.337 -1.072,0.3807 -0.1687,0.0323 -0.4989,0.038 -0.5903,0.0102z" android:strokeWidth=".021728"/>
</vector>
+4
View File
@@ -0,0 +1,4 @@
<vector android:height="24dp" android:viewportHeight="384"
android:viewportWidth="384" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#FF000000" android:pathData="m304,0c-8.832,0 -16,7.168 -16,16v16h-96c-8.832,0 -16,7.168 -16,16s7.168,16 16,16h96v32h-72c-8.832,0 -16,7.168 -16,16s7.168,16 16,16h55.754l-79.754,45.566 -79.754,-45.566h39.754c8.832,0 16,-7.168 16,-16s-7.168,-16 -16,-16h-56v-32h32c8.832,0 16,-7.168 16,-16s-7.168,-16 -16,-16h-32v-16c0,-8.832 -7.168,-16 -16,-16s-16,7.168 -16,16v84.145c0,4.945 0.68,9.793 1.785,14.504 0.063,0.383 0.137,0.758 0.23,1.137 4.215,16.648 14.977,31.215 30.23,39.934l63.508,36.281 -63.516,36.289c-15.246,8.719 -26.008,23.285 -30.223,39.934 -0.086,0.379 -0.168,0.754 -0.23,1.137 -1.105,4.711 -1.785,9.551 -1.785,14.496v84.145c0,8.832 7.168,16 16,16s16,-7.168 16,-16v-16h96c8.832,0 16,-7.168 16,-16s-7.168,-16 -16,-16h-96v-32h48c8.832,0 16,-7.168 16,-16s-7.168,-16 -16,-16h-31.754l79.754,-45.566 79.754,45.566h-63.754c-8.832,0 -16,7.168 -16,16s7.168,16 16,16h80v32h-32c-8.832,0 -16,7.168 -16,16s7.168,16 16,16h32v16c0,8.832 7.168,16 16,16s16,-7.168 16,-16v-84.145c0,-4.961 -0.688,-9.816 -1.793,-14.543 -0.063,-0.352 -0.129,-0.703 -0.215,-1.047 -4.207,-16.664 -14.977,-31.258 -30.238,-39.977l-63.508,-36.289 63.508,-36.289c15.262,-8.719 26.031,-23.313 30.238,-39.977 0.078,-0.344 0.152,-0.695 0.215,-1.047 1.105,-4.727 1.793,-9.582 1.793,-14.543v-84.145c0,-8.832 -7.168,-16 -16,-16zM304,0"/>
</vector>
@@ -0,0 +1,7 @@
<vector android:height="24dp" android:viewportHeight="512.0389"
android:viewportWidth="512" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#FF000000" android:pathData="m319.723,183.184v-140.52h21.328v-42.664h-170.648v42.664h21.328v140.52c-87.461,35.199 -129.59,134.66 -94.125,222.117 35.461,87.461 134.922,129.59 222.117,94.125 87.457,-35.461 129.586,-134.918 94.125,-222.113 -17.332,-42.934 -51.195,-76.793 -94.125,-94.129zM219.195,218.652c9.063,-2.668 15.199,-10.934 15.199,-20.535v-155.453h42.664v155.453c0,9.332 6.129,17.867 15.195,20.535 10.402,3.199 20.27,7.465 29.602,13.328 -3.199,3.465 -6.668,6.934 -9.867,10.398 -24.266,26.137 -47.195,50.664 -85.59,65.863 -33.07,13.336 -65.598,16.535 -96.531,9.867 9.066,-47.195 43.465,-85.594 89.328,-99.457zM255.727,469.297c-62.93,0 -116.527,-45.863 -126.395,-107.992 10.668,1.867 21.602,2.668 32.535,2.668 27.73,-0.266 54.93,-5.867 80.527,-16.266 47.195,-18.93 75.727,-49.332 101.059,-76.262 3.73,-4 7.199,-7.73 10.934,-11.465 45.063,54.129 37.594,134.922 -16.535,179.984 -23.195,18.934 -52.262,29.332 -82.125,29.332zM255.727,469.297"/>
<path android:fillColor="#FF000000" android:pathData="m362.387,341.305c0,11.785 -9.555,21.336 -21.336,21.336s-21.328,-9.551 -21.328,-21.336c0,-11.781 9.547,-21.328 21.328,-21.328s21.336,9.547 21.336,21.328zM362.387,341.305"/>
<path android:fillColor="#FF000000" android:pathData="m319.723,405.301c0,11.785 -9.551,21.336 -21.332,21.336 -11.785,0 -21.332,-9.551 -21.332,-21.336 0,-11.781 9.547,-21.332 21.332,-21.332 11.781,0 21.332,9.551 21.332,21.332zM319.723,405.301"/>
<path android:fillColor="#FF000000" android:pathData="m234.395,405.301c0,11.785 -9.551,21.336 -21.332,21.336s-21.332,-9.551 -21.332,-21.336c0,-11.781 9.551,-21.332 21.332,-21.332s21.332,9.551 21.332,21.332zM234.395,405.301"/>
</vector>
+4
View File
@@ -0,0 +1,4 @@
<vector android:height="24dp" android:viewportHeight="384"
android:viewportWidth="384" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#FF000000" android:pathData="m368,352h-80v-48h17.465c12.68,0 24.961,-3.719 35.504,-10.754l11.902,-7.934c7.352,-4.898 9.336,-14.832 4.441,-22.184 -4.898,-7.352 -14.832,-9.359 -22.184,-4.441l-11.906,7.938c-5.277,3.52 -11.414,5.375 -17.758,5.375h-7.578l-24,-48h31.578c12.68,0 24.961,-3.719 35.504,-10.754l11.902,-7.934c7.352,-4.898 9.336,-14.832 4.441,-22.184 -4.898,-7.352 -14.832,-9.352 -22.184,-4.441l-11.906,7.938c-5.277,3.52 -11.414,5.375 -17.758,5.375h-7.578l-24,-48h15.578c12.68,0 24.961,-3.719 35.504,-10.754l11.902,-7.934c7.352,-4.898 9.336,-14.832 4.441,-22.184 -4.906,-7.352 -14.84,-9.352 -22.184,-4.441l-11.906,7.938c-5.277,3.52 -11.414,5.375 -17.758,5.375h-24.184l-59.395,-103.938c-2.848,-4.984 -8.145,-8.063 -13.887,-8.063s-11.039,3.078 -13.887,8.063l-59.395,103.938h-24.184c-6.336,0 -12.48,-1.855 -17.75,-5.375l-11.906,-7.938c-7.336,-4.902 -17.277,-2.91 -22.184,4.441 -4.902,7.352 -2.91,17.285 4.441,22.184l11.902,7.934c10.535,7.035 22.816,10.754 35.496,10.754h15.578l-24,48h-7.578c-6.336,0 -12.48,-1.855 -17.75,-5.375l-11.906,-7.938c-7.344,-4.895 -17.285,-2.91 -22.184,4.441 -4.895,7.352 -2.91,17.285 4.441,22.184l11.902,7.934c10.535,7.035 22.816,10.754 35.496,10.754h31.578l-24,48h-7.578c-6.336,0 -12.48,-1.855 -17.75,-5.375l-11.906,-7.938c-7.344,-4.902 -17.285,-2.91 -22.184,4.441 -4.895,7.352 -2.91,17.285 4.441,22.184l11.902,7.934c10.535,7.035 22.816,10.754 35.496,10.754h17.465v48h-80c-8.832,0 -16,7.168 -16,16s7.168,16 16,16h352c8.832,0 16,-7.168 16,-16s-7.168,-16 -16,-16zM192,48.246 L228.434,112h-72.867zM240,144c0,2.488 0.574,4.938 1.688,7.16l20.426,40.84h-140.227l20.426,-40.84c1.113,-2.223 1.688,-4.672 1.688,-7.16zM240,224c0,2.488 0.574,4.938 1.688,7.16l20.426,40.84h-140.227l20.426,-40.84c1.113,-2.223 1.688,-4.672 1.688,-7.16zM128,304h128v48h-128zM128,304"/>
</vector>
@@ -0,0 +1,5 @@
<vector android:height="24dp" android:viewportHeight="512"
android:viewportWidth="512" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#FF000000" android:pathData="m305.1,501h-98.3c-11.3,0 -20.4,-9.1 -20.4,-20.4v-44.8c-2.9,-1.1 -5.7,-2.3 -8.5,-3.5l-31.5,31.7c-7.7,7.6 -21.2,7.7 -28.9,0l-69.5,-69.5c-3.8,-3.8 -6,-9 -6,-14.4 0,-5.4 2.2,-10.6 6,-14.4l31.6,-31.7c-1.2,-2.8 -2.4,-5.6 -3.5,-8.5h-44.7c-11.3,0 -20.4,-9.1 -20.4,-20.4v-98.3c0,-11.3 9.1,-20.4 20.4,-20.4h44.8c1.1,-2.9 2.3,-5.7 3.5,-8.5l-31.7,-31.5c-8,-8 -8,-20.9 0,-28.9l69.5,-69.5c8,-8 20.9,-8 28.9,0l31.6,31.6c2.8,-1.2 5.6,-2.4 8.5,-3.5v-44.7c0,-11.3 9.1,-20.4 20.4,-20.4h98.3c11.3,0 20.4,9.1 20.4,20.4v44.8c2.9,1.1 5.7,2.3 8.5,3.5l31.5,-31.7c8,-8 20.9,-8 28.9,0l69.5,69.5c8,8 8,20.9 0,28.9l-31.6,31.6c1.2,2.8 2.4,5.6 3.5,8.5h44.8c11.3,0 20.4,9.1 20.4,20.4v98.3c0,11.3 -9.1,20.4 -20.4,20.4h-44.8c-1.1,2.9 -2.3,5.7 -3.5,8.5l31.6,31.6c8,8 8,20.9 0,28.9l-69.5,69.4c-7.7,7.7 -21.2,7.7 -28.9,0l-31.6,-31.6c-2.8,1.2 -5.6,2.4 -8.5,3.5v44.8c0,11.2 -9.1,20.3 -20.4,20.3zM227.3,460.2h57.4v-38.9c0,-9 5.9,-17 14.6,-19.6 10.3,-3.1 20.1,-7.1 29.1,-12 8,-4.3 17.8,-2.9 24.2,3.5l27.5,27.5 40.6,-40.6 -27.5,-27.5c-6.4,-6.4 -7.8,-16.2 -3.5,-24.2 4.9,-9 8.9,-18.7 12,-29.1 2.6,-8.7 10.5,-14.6 19.6,-14.6h39v-57.4h-39c-9,0 -17,-5.9 -19.6,-14.6 -3.1,-10.3 -7.1,-20.1 -12,-29.1 -4.3,-8 -2.9,-17.8 3.5,-24.2l27.5,-27.5 -40.6,-40.6 -27.5,27.5c-6.4,6.4 -16.2,7.8 -24.2,3.5 -9,-4.9 -18.7,-8.9 -29.1,-12 -8.7,-2.6 -14.6,-10.5 -14.6,-19.6v-39h-57.4v39c0,9 -5.9,17 -14.6,19.6 -10.3,3.1 -20.1,7.1 -29.1,12 -7.9,4.3 -17.8,2.9 -24.2,-3.5l-27.5,-27.5 -40.6,40.6 27.5,27.5c6.4,6.4 7.8,16.2 3.5,24.2 -4.9,9 -8.9,18.7 -12,29.1 -2.6,8.7 -10.5,14.6 -19.6,14.6h-39v57.4h39c9,0 17,5.9 19.6,14.6 3.1,10.3 7.1,20.1 12,29.1 4.3,8 2.9,17.8 -3.5,24.2l-27.5,27.5 40.6,40.6 27.5,-27.5c6.4,-6.4 16.2,-7.8 24.2,-3.5 9,4.9 18.8,8.9 29.1,12 8.7,2.6 14.6,10.5 14.6,19.6v38.9z"/>
<path android:fillColor="#FF000000" android:pathData="m256,365.1c-60.2,0 -109.1,-48.9 -109.1,-109.1 0,-60.2 48.9,-109.1 109.1,-109.1 60.2,0 109.1,48.9 109.1,109.1 0,60.2 -48.9,109.1 -109.1,109.1zM256,187.7c-37.6,0 -68.3,30.6 -68.3,68.3 0,37.6 30.6,68.3 68.3,68.3 37.6,0 68.3,-30.6 68.3,-68.3 0,-37.6 -30.7,-68.3 -68.3,-68.3z"/>
</vector>
+7
View File
@@ -0,0 +1,7 @@
<vector android:height="24dp" android:viewportHeight="384"
android:viewportWidth="384" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#FF000000" android:pathData="m8,144.785c0,92.488 39.098,239.215 144,239.215 46.047,0 79.406,-28.281 102.359,-67.824 13,10.391 28.914,16.313 45.641,16.313 41.902,0 76,-36.063 76,-80.391s-34.098,-80.395 -76,-80.395c-1.695,0 -3.367,0.145 -5.047,0.266 0.703,-9.426 1.047,-18.543 1.047,-27.184 0,-8.832 -7.168,-16 -16,-16h-256c-8.832,0 -16,7.16 -16,16zM300,203.703c24.266,0 44,21.703 44,48.395 0,26.688 -19.734,48.391 -44,48.391 -11.711,0 -22.824,-5.273 -31.016,-14.289 10.641,-25.824 17.871,-54.102 22.145,-81.465 2.918,-0.656 5.879,-1.031 8.871,-1.031zM263.617,160.785c-0.449,9.453 -1.305,19.191 -2.547,29.031 -0.023,0.152 -0.031,0.305 -0.055,0.457 -3.887,30.637 -11.648,62.207 -23.566,89.254 -0.969,1.418 -1.633,2.977 -2.105,4.602 -18.352,39.262 -45.824,67.871 -83.344,67.871 -72.566,0 -107.633,-106.93 -111.617,-191.215zM263.617,160.785"/>
<path android:fillColor="#FF000000" android:pathData="m64,16v68.68c0,8.832 7.168,16 16,16s16,-7.168 16,-16v-68.68c0,-8.832 -7.168,-16 -16,-16s-16,7.168 -16,16zM64,16"/>
<path android:fillColor="#FF000000" android:pathData="m128,16v68.68c0,8.832 7.168,16 16,16s16,-7.168 16,-16v-68.68c0,-8.832 -7.168,-16 -16,-16s-16,7.168 -16,16zM128,16"/>
<path android:fillColor="#FF000000" android:pathData="m192,16v68.68c0,8.832 7.168,16 16,16s16,-7.168 16,-16v-68.68c0,-8.832 -7.168,-16 -16,-16s-16,7.168 -16,16zM192,16"/>
</vector>
+12
View File
@@ -0,0 +1,12 @@
<vector android:height="24dp" android:viewportHeight="512"
android:viewportWidth="512.16034" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillAlpha="1" android:fillColor="#000000"
android:fillType="nonZero"
android:pathData="M506.324,60.074C502.324,55.547 496.461,53.145 490.594,53.145L341.309,53.145C309.848,53.145 279.461,64.609 256,85.668C232.543,64.609 202.148,53.145 170.695,53.145L21.41,53.145C8.879,53.145 -0.988,64.344 0.078,76.605C3.813,108.594 11.008,140.32 21.41,170.707L21.41,458.352L64.059,458.352L64.059,253.617C89.117,285.605 123.508,309.063 170.695,309.063C202.148,309.063 232.543,297.602 256,276.543C279.461,297.602 309.848,309.063 341.309,309.063C486.859,309.063 510.852,86.203 511.918,76.605C512.453,70.473 510.32,64.609 506.324,60.074ZM341.309,266.414C314.383,266.414 289.055,253.883 273.059,232.289C264.797,221.09 247.469,221.09 238.938,232.289C222.941,253.883 197.617,266.414 170.695,266.414C86.453,266.414 55.531,147.516 46.199,95.797L170.695,95.797C197.617,95.797 222.941,108.328 238.938,129.922C247.199,141.117 264.531,141.117 273.059,129.922C289.055,108.328 314.383,95.797 341.309,95.797L465.801,95.797C456.473,147.516 425.547,266.414 341.309,266.414ZM341.309,266.414" android:strokeColor="#00000000"/>
<path android:fillAlpha="1" android:fillColor="#000000"
android:fillType="nonZero"
android:pathData="M277.328,181.105C277.328,216.297 306.117,245.082 341.309,245.082C397.82,245.082 421.816,160.578 426.078,143.52C429.281,130.191 419.148,117.125 405.289,117.125L341.309,117.125C306.117,117.125 277.328,145.914 277.328,181.105ZM341.309,202.434C329.578,202.434 319.98,192.836 319.98,181.105C319.98,169.375 329.578,159.777 341.309,159.777L375.695,159.777C366.367,181.902 353.035,202.434 341.309,202.434ZM341.309,202.434" android:strokeColor="#00000000"/>
<path android:fillAlpha="1" android:fillColor="#000000"
android:fillType="nonZero"
android:pathData="M170.695,117.125L106.715,117.125C93.117,117.125 82.723,130.457 85.918,143.52C90.184,160.578 114.176,245.082 170.695,245.082C206.148,245.082 234.672,216.563 234.672,181.105C234.672,145.648 206.148,117.125 170.695,117.125ZM170.695,202.434C158.965,202.434 145.637,181.902 136.301,159.777L170.695,159.777C182.426,159.777 192.02,169.375 192.02,181.105C192.02,192.836 182.426,202.434 170.695,202.434ZM170.695,202.434" android:strokeColor="#00000000"/>
</vector>
+10
View File
@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="1px"
android:height="1px"
android:viewportWidth="1"
android:viewportHeight="1">
<path
android:fillColor="#FF000000"
android:pathData="M504.502,75.496c-9.997,-9.998 -26.205,-9.998 -36.204,0L161.594,382.203L43.702,264.311c-9.997,-9.998 -26.205,-9.997 -36.204,0c-9.998,9.997 -9.998,26.205 0,36.203l135.994,135.992c9.994,9.997 26.214,9.99 36.204,0L504.502,111.7C514.5,101.703 514.499,85.494 504.502,75.496z"/>
</vector>
+5
View File
@@ -0,0 +1,5 @@
<vector android:height="24dp" android:viewportHeight="384"
android:viewportWidth="384" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#FF000000" android:pathData="m368,352h-96v-48h32c8.832,0 16,-7.168 16,-16v-272c0,-8.832 -7.168,-16 -16,-16s-16,7.168 -16,16v48h-35.504l-12.977,-51.879c-1.777,-7.121 -8.176,-12.121 -15.52,-12.121h-64c-7.344,0 -13.742,5 -15.52,12.121l-12.977,51.879h-35.504v-48c0,-8.832 -7.168,-16 -16,-16s-16,7.168 -16,16v272c0,8.832 7.168,16 16,16h32v48h-96c-8.832,0 -16,7.168 -16,16s7.168,16 16,16h352c8.832,0 16,-7.168 16,-16s-7.168,-16 -16,-16zM240,352h-32v-48h32zM172.496,32h39.016l8,32h-55.016zM96,96h143.945,0.047 0.031,47.977v176h-192zM144,304h32v48h-32zM144,304"/>
<path android:fillColor="#FF000000" android:pathData="m192,248c35.289,0 64,-28.711 64,-64s-28.711,-64 -64,-64 -64,28.711 -64,64 28.711,64 64,64zM192,152c17.648,0 32,14.352 32,32s-14.352,32 -32,32 -32,-14.352 -32,-32 14.352,-32 32,-32zM192,152"/>
</vector>
+4
View File
@@ -0,0 +1,4 @@
<vector android:height="24dp" android:viewportHeight="384"
android:viewportWidth="384" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#FF000000" android:pathData="m368,352h-23.215l-56.008,-88.016c-1.664,-2.617 -3.113,-5.328 -4.699,-7.984h19.922c8.832,0 16,-7.168 16,-16s-7.168,-16 -16,-16h-36.727c-9.211,-20.543 -16.113,-42 -20.68,-64h17.406c8.832,0 16,-7.168 16,-16s-7.168,-16 -16,-16h-22.215c-1.066,-10.441 -1.785,-20.945 -1.785,-31.512v-16.488c0,-8.832 -7.168,-16 -16,-16h-16v-48c0,-8.832 -7.168,-16 -16,-16s-16,7.168 -16,16v48h-16c-8.832,0 -16,7.168 -16,16v16.488c0,10.574 -0.719,21.07 -1.785,31.512h-22.215c-8.832,0 -16,7.168 -16,16s7.168,16 16,16h17.406c-4.566,22 -11.469,43.457 -20.68,64h-36.727c-8.832,0 -16,7.168 -16,16s7.168,16 16,16h19.91c-1.582,2.656 -3.031,5.375 -4.695,7.984l-56,88.016h-23.215c-8.832,0 -16,7.168 -16,16s7.168,16 16,16h352c8.832,0 16,-7.168 16,-16s-7.168,-16 -16,-16zM176,96.488v-0.488h32v0.488c0,10.566 0.656,21.063 1.617,31.512h-35.242c0.969,-10.457 1.625,-20.953 1.625,-31.512zM169.895,160h44.211c4.109,21.902 10.328,43.313 18.598,64h-81.406c8.27,-20.688 14.488,-42.098 18.598,-64zM122.223,281.168c5.219,-8.191 9.945,-16.625 14.418,-25.168h110.719c4.48,8.543 9.207,16.977 14.418,25.168l45.07,70.832h-54.359l-6.914,-27.633c-5.344,-21.414 -24.484,-36.367 -46.559,-36.367h-14.031c-22.074,0 -41.215,14.953 -46.57,36.359l-6.91,27.641h-54.352zM219.504,352h-55.008l4.969,-19.879c1.781,-7.137 8.168,-12.121 15.52,-12.121h14.031c7.352,0 13.738,4.984 15.52,12.129zM219.504,352"/>
</vector>
@@ -0,0 +1,4 @@
<vector android:height="24dp" android:viewportHeight="512.0153"
android:viewportWidth="512" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#FF000000" android:pathData="m405.152,373.34c99.734,-99.996 99.734,-261.859 0,-361.855l-30.129,30.133c83.195,83.195 83.461,218.125 0.266,301.32 -29.598,29.602 -67.199,49.867 -108.262,58.133v-21.867c103.461,-23.465 168.258,-126.395 144.523,-229.855 -23.461,-103.465 -126.395,-167.996 -229.855,-144.531 -103.465,23.469 -168.527,126.664 -144.797,229.859 20,87.461 97.598,149.328 187.195,149.328v21.336c-56.535,0 -110.93,-22.402 -150.93,-62.402l-30.133,30.133c48,47.996 113.063,74.93 181.063,74.93v21.336h-42.668v42.664h127.996v-42.664h-42.66v-25.066c52.527,-8.535 100.793,-33.336 138.391,-70.93zM295.023,323.738 L267.559,296.273c22.398,-17.598 42.664,-37.863 60.266,-60.266l27.73,27.469c-13.863,25.332 -34.934,46.395 -60.531,60.262zM74.766,192.277c0,-8.801 0.797,-17.602 2.398,-26.398l18.668,18.664c-7.203,12 -13.066,24.801 -17.867,37.867 -2.133,-9.867 -3.199,-20 -3.199,-30.133zM373.422,192.277c0,8.797 -0.801,17.598 -2.398,26.398l-18.668,-18.668c7.199,-12 13.066,-24.801 17.867,-37.863 2.133,9.863 3.199,19.996 3.199,30.133zM337.691,108.813c0.531,15.734 -5.07,36.535 -16.801,59.469l-21.336,-21.336zM307.555,78.68 L269.426,116.813 248.094,95.48c21.867,-11.199 41.863,-16.801 57.328,-16.801zM239.293,147.211 L178.762,207.477 150.766,179.207c17.328,-22.66 37.594,-42.926 60.262,-60.262zM148.629,237.609 L110.496,275.742c-0.531,-15.734 5.066,-36.535 16.801,-59.465zM140.629,305.871 L178.762,267.742 200.094,289.074c-22.668,11.73 -43.734,17.332 -59.465,16.797zM208.895,237.609 L269.426,177.344 297.422,205.344c-8.531,11.465 -18.133,22.133 -27.996,32.266 -10.133,10.133 -20.801,19.465 -32.266,28zM254.492,46.148c-13.066,4.797 -25.867,10.93 -37.867,17.863l-18.664,-18.66c18.664,-3.203 37.867,-2.934 56.531,0.797zM153.16,61.078 L180.625,88.547c-22.398,17.598 -42.66,37.867 -60.262,60.266l-27.734,-27.465c13.867,-25.602 34.934,-46.402 60.531,-60.27zM193.695,338.406c13.066,-4.801 25.863,-10.934 37.863,-17.867l18.668,18.664c-18.668,3.469 -37.867,3.203 -56.531,-0.797zM193.695,338.406"/>
</vector>
+4
View File
@@ -0,0 +1,4 @@
<vector android:height="24dp" android:viewportHeight="384"
android:viewportWidth="384" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#FF000000" android:pathData="m336,193.977 l12.496,-49.977h19.504c8.832,0 16,-7.168 16,-16s-7.168,-16 -16,-16h-96v-48c0,-8.832 -7.168,-16 -16,-16h-48v-32c0,-8.832 -7.168,-16 -16,-16s-16,7.168 -16,16v32h-48c-8.832,0 -16,7.168 -16,16v48h-96c-8.832,0 -16,7.168 -16,16s7.168,16 16,16h19.504l12.496,49.977v158.023h-32c-8.832,0 -16,7.168 -16,16s7.168,16 16,16h352c8.832,0 16,-7.168 16,-16s-7.168,-16 -16,-16h-32zM176,272v80h-32v-80zM208,272h32v80h-32zM80,240v-32h224v32zM144,80h96v32h-96zM315.504,144 L307.504,176h-231.008l-8,-32zM80,272h32v80h-32zM272,352v-80h32v80zM272,352"/>
</vector>
+4
View File
@@ -0,0 +1,4 @@
<vector android:height="24dp" android:viewportHeight="512.108"
android:viewportWidth="512.108" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#FF000000" android:pathData="M407.65,30.31c-5.858,-5.857 -15.355,-5.858 -21.213,0c-2.649,2.649 -5.235,5.271 -7.78,7.85c-24.479,24.814 -42.165,42.744 -75.047,45.536c-10.553,0.896 -21.649,2.1 -32.689,4.502c-25.522,-14.996 -46.521,-14.169 -63.558,-13.484c-17.18,0.687 -27.55,1.104 -41.103,-12.447c-11.66,-11.661 -22.823,-23.236 -34.611,-35.024c-5.855,-5.855 -15.356,-5.857 -21.213,0L4.674,133.007c-6.828,6.83 -5.516,16.303 -0.302,21.516c5.568,5.569 11.84,10.936 17.905,16.126c13.227,11.319 26.904,23.024 32.805,36.404c6.777,15.365 4.466,35.92 15.871,55.32l-1.562,1.562c-8.5,8.5 -13.181,19.8 -13.181,31.819c0,12.02 4.681,23.32 13.181,31.82c8.143,8.144 18.658,12.501 29.341,13.085c0.584,10.684 4.942,21.198 13.085,29.342c8.138,8.139 18.641,12.494 29.318,13.083c0.598,11.088 5.196,21.43 13.109,29.343c8.143,8.144 18.657,12.501 29.341,13.085c0.584,10.684 4.941,21.198 13.085,29.341c14.118,14.118 34.848,16.643 51.228,8.801l12.412,12.412c17.584,17.585 46.052,17.589 63.639,0c7.913,-7.913 12.511,-18.254 13.109,-29.343c10.676,-0.59 21.181,-4.946 29.318,-13.083c8.137,-8.137 12.494,-18.642 13.083,-29.317c11.089,-0.598 21.43,-5.196 29.343,-13.109c7.913,-7.913 12.511,-18.254 13.109,-29.343c10.676,-0.589 21.18,-4.946 29.317,-13.083c17.545,-17.545 17.545,-46.094 0,-63.639l-11.9,-11.9c11.927,-19.934 9.194,-41.002 16.371,-56.8c9.156,-20.154 34.741,-37.552 52.316,-56.166c5.572,-5.901 5.439,-15.165 -0.299,-20.904C479.016,110.675 435.386,58.045 407.65,30.31zM90.604,285.148c17.047,-17.047 1.738,-1.738 21.213,-21.213c5.847,-5.847 15.363,-5.85 21.213,0c5.849,5.849 5.849,15.365 0,21.214l-21.213,21.213c-5.849,5.849 -15.365,5.849 -21.214,0C84.755,300.513 84.755,290.997 90.604,285.148zM133.03,327.574l51.213,-51.213c5.848,-5.847 15.364,-5.849 21.213,0c5.849,5.849 5.849,15.365 0,21.213l-51.213,51.213c-5.849,5.849 -15.365,5.849 -21.213,0C127.182,342.94 127.182,333.423 133.03,327.574zM175.457,370.001l51.214,-51.213c5.861,-5.861 15.349,-5.863 21.213,0c5.848,5.849 5.848,15.365 0,21.213l-51.213,51.213c-5.849,5.848 -15.365,5.847 -21.213,0C169.595,385.352 169.594,375.865 175.457,370.001zM217.883,433.641c-5.848,-5.849 -5.848,-15.365 0,-21.213l21.213,-21.213c5.848,-5.847 15.361,-5.849 21.211,-0.002c0.001,0 0.002,0.001 0.002,0.002c5.856,5.862 5.862,15.35 0,21.213l-21.214,21.213C233.233,439.503 223.746,439.503 217.883,433.641zM302.735,454.854c-5.861,5.861 -15.349,5.863 -21.213,0l-10.607,-10.607l10.607,-10.606c3.67,-3.67 6.625,-7.865 8.801,-12.412l12.412,12.412C308.598,439.504 308.599,448.991 302.735,454.854zM430.015,327.575c-5.849,5.849 -15.365,5.848 -21.213,0l-42.646,-42.646c-5.857,-5.858 -15.355,-5.858 -21.213,0c-5.858,5.858 -5.858,15.355 0,21.213l42.646,42.646c5.848,5.849 5.848,15.365 0,21.213c-5.861,5.86 -15.344,5.864 -21.21,0.003c-0.001,-0.001 -0.002,-0.002 -0.003,-0.003c-0.002,-0.001 -0.003,-0.003 -0.005,-0.004l-41.704,-41.704c-5.857,-5.858 -15.355,-5.858 -21.213,0c-5.858,5.858 -5.858,15.355 0,21.213l41.708,41.708c5.849,5.849 5.849,15.365 0,21.213c-5.849,5.849 -15.364,5.849 -21.214,0l-42.426,-42.427c-3.718,-3.718 -7.934,-6.64 -12.431,-8.782c17.545,-17.545 17.55,-46.099 0.005,-63.644c-7.913,-7.913 -18.254,-12.511 -29.343,-13.108c-0.589,-10.676 -4.946,-21.181 -13.083,-29.318c-17.587,-17.587 -46.051,-17.589 -63.64,0c-2.142,-4.497 -5.069,-8.709 -8.787,-12.427c-16.568,-16.566 -42.941,-17.481 -60.602,-2.761c-4.095,-12.391 -3.903,-28.671 -11.11,-45.014c-8.656,-19.627 -25.706,-34.218 -40.748,-47.091c-1.742,-1.49 -3.455,-2.957 -5.126,-4.405c20.5,-20.501 64.146,-64.147 84.341,-84.343c8.019,8.141 15.856,16.178 24.05,24.371c22.841,22.841 44.455,21.975 63.517,21.21c7.239,-0.29 14.295,-0.568 21.675,0.401c-4.288,2.991 -8.424,6.414 -12.357,10.353l-27.427,27.426c-17.545,17.545 -17.544,46.094 0,63.639c17.585,17.585 46.052,17.589 63.64,0l27.426,-27.426c5.864,-5.863 15.35,-5.863 21.213,0l127.279,127.279C435.863,312.21 435.863,321.726 430.015,327.575zM428.385,204.04c-7.744,17.046 -7.3,33.946 -11.601,46.665l-45.665,-45.665c13.198,-2.069 25.939,-7.662 36.73,-16.754c6.335,-5.338 7.144,-14.801 1.806,-21.136c-5.337,-6.335 -14.801,-7.144 -21.136,-1.806c-15.497,13.058 -37.674,14.142 -54.31,2.786l-10.259,-10.259c-17.587,-17.587 -46.051,-17.589 -63.64,0l-27.426,27.426c-5.862,5.861 -15.35,5.863 -21.213,0c-5.848,-5.849 -5.849,-15.365 0,-21.213l27.435,-27.434c17.487,-17.512 42.709,-20.995 67.044,-23.061c42.152,-3.579 66.196,-26.376 90.769,-51.223c23.877,25.371 53.737,60.645 79.009,87.329C458.841,165.423 438.441,181.905 428.385,204.04z"/>
</vector>
+6
View File
@@ -0,0 +1,6 @@
<vector android:height="24dp" android:viewportHeight="384"
android:viewportWidth="384.00485" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#FF000000" android:pathData="m384.004,120.277c0.102,-5.762 -2.898,-11.121 -7.859,-14.051l-176,-104c-5.023,-2.965 -11.254,-2.965 -16.277,0l-176,104c-4.961,2.938 -7.961,8.289 -7.863,14.051 0.094,5.758 3.277,11.016 8.336,13.773l63.664,34.723v111.23c0,8.832 7.168,16 16,16h208c8.832,0 16,-7.168 16,-16v-111.23l63.664,-34.723c5.047,-2.758 8.23,-8.016 8.336,-13.773zM280.004,264.004h-176v-77.777l80.336,43.824c2.391,1.305 5.023,1.953 7.664,1.953 2.637,0 5.27,-0.648 7.664,-1.953l80.336,-43.824zM192.004,197.781 L48.395,119.453 192.004,34.59 335.609,119.445zM192.004,197.781"/>
<path android:fillColor="#FF000000" android:pathData="m336.004,200.004v80c0,8.832 7.168,16 16,16 8.832,0 16,-7.168 16,-16v-80c0,-8.832 -7.168,-16 -16,-16 -8.832,0 -16,7.168 -16,16zM336.004,200.004"/>
<path android:fillColor="#FF000000" android:pathData="m363.012,316.395c-6.168,-5.855 -15.84,-5.855 -22.016,0 -7.844,7.434 -20.992,21.938 -20.992,35.609 0,17.648 14.352,32 32,32 17.645,0 32,-14.352 32,-32 0,-13.672 -13.152,-28.176 -20.992,-35.609zM363.012,316.395"/>
</vector>
+6
View File
@@ -0,0 +1,6 @@
<vector android:height="24dp" android:viewportHeight="512"
android:viewportWidth="512" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#FF000000" android:pathData="m469.668,42.668v-42.668h-362.668c-35.199,0 -64,28.801 -64,64v384c0,35.199 28.801,64 64,64h341.332c11.734,0 21.336,-9.602 21.336,-21.332v-384c0,-11.734 -9.602,-21.336 -21.336,-21.336h-21.332v-42.664zM427,469.332h-320c-11.734,0 -21.332,-9.598 -21.332,-21.332v-323.734c6.934,2.402 14.133,3.734 21.332,3.734h149.332v106.668c0.27,15.465 16.801,25.867 30.934,19.199l33.066,-16.535 33.066,16.535c13.867,6.668 30.668,-3.469 30.934,-19.199v-106.668h42.668zM299,128h42.668v72.266l-11.734,-5.867c-6.133,-2.934 -13.066,-2.934 -19.199,0l-11.734,5.867zM384.332,85.332h-277.332c-11.734,0 -21.332,-9.598 -21.332,-21.332s9.598,-21.332 21.332,-21.332h277.332zM384.332,85.332"/>
<path android:fillColor="#FF000000" android:pathData="m171,298.668h170.668v42.664h-170.668zM171,298.668"/>
<path android:fillColor="#FF000000" android:pathData="m171,384h170.668v42.668h-170.668zM171,384"/>
</vector>
+9
View File
@@ -0,0 +1,9 @@
<vector android:height="47dp" android:viewportHeight="46.90401"
android:viewportWidth="31.350744" android:width="31dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#FF000000" android:pathData="m15.676,0c-8.6437,0 -15.676,7.0324 -15.676,15.676 0,3.5375 1.1599,6.88 3.3528,9.6644 0.4329,0.5511 0.8877,1.0787 1.3692,1.6372l0.0265,0.0307c1.4732,1.7092 2.9964,3.4772 3.5653,5.5589 0.1286,0.477 0.1468,1.3917 0.1394,2.0963l0,1.1975c0,1.0959 0.8885,1.9844 1.9844,1.9844l10.3907,0c1.0959,0 1.9844,-0.8885 1.9844,-1.9844l0,-1.2115c-0.0066,-0.9202 0.041,-1.5917 0.1371,-1.9402 0.572,-2.068 2.2601,-4.0537 3.7629,-5.8211l0.0648,-0.0762c0.4337,-0.5096 0.8435,-0.9909 1.2166,-1.4653 2.196,-2.7861 3.3568,-6.1301 3.3568,-9.6708 -0.0003,-8.6437 -7.0318,-15.676 -15.6747,-15.676zM24.8753,22.892c-0.3268,0.4157 -0.712,0.8684 -1.12,1.3475l-0.0799,0.0939c-1.7555,2.0648 -3.7452,4.405 -4.5516,7.3202 -0.114,0.4138 -0.2408,1.0329 -0.273,2.223l-6.4325,0c-0.0275,-1.2639 -0.1564,-1.9121 -0.2741,-2.3487 -0.807,-2.9538 -2.7932,-5.2586 -4.3894,-7.1109l-0.0267,-0.0312c-0.4511,-0.5231 -0.8771,-1.0173 -1.2557,-1.4989 -1.6378,-2.0796 -2.5035,-4.5733 -2.5035,-7.211 0,-6.4553 5.252,-11.7073 11.7073,-11.7073 6.4545,0 11.7057,5.252 11.7057,11.7073 0,2.6405 -0.8662,5.135 -2.5064,7.216z"/>
<path android:fillColor="#FF000000" android:pathData="M20.828,38.4088L10.4375,38.4088c-1.0959,0 -1.9844,0.8885 -1.9844,1.9844 0,1.0959 0.8885,1.9844 1.9844,1.9844l10.3907,0c1.0959,0 1.9844,-0.8885 1.9844,-1.9844 0,-1.0959 -0.8887,-1.9844 -1.9846,-1.9844z"/>
<path android:fillColor="#FF000000" android:pathData="m18.2303,42.9353l-5.1951,0c-1.0959,0 -1.9844,0.8885 -1.9844,1.9844 0,1.0959 0.8885,1.9844 1.9844,1.9844l5.1951,0c1.0959,0 1.9844,-0.8885 1.9844,-1.9844 0,-1.0959 -0.8885,-1.9844 -1.9844,-1.9844z"/>
<path android:fillColor="#FF000000" android:pathData="m15.676,0c-8.6437,0 -15.676,7.0324 -15.676,15.676 0,3.5375 1.1599,6.88 3.3528,9.6644 0.4329,0.5511 0.8877,1.0787 1.3692,1.6372l0.0265,0.0307c1.4732,1.7092 2.9964,3.4772 3.5653,5.5589 0.1286,0.477 0.1468,1.3917 0.1394,2.0963l0,1.1975c0,1.0959 0.8885,1.9844 1.9844,1.9844l10.3907,0c1.0959,0 1.9844,-0.8885 1.9844,-1.9844l0,-1.2115c-0.0066,-0.9202 0.041,-1.5917 0.1371,-1.9402 0.572,-2.068 2.2601,-4.0537 3.7629,-5.8211l0.0648,-0.0762c0.4337,-0.5096 0.8435,-0.9909 1.2166,-1.4653 2.196,-2.7861 3.3568,-6.1301 3.3568,-9.6708 -0.0003,-8.6437 -7.0318,-15.676 -15.6747,-15.676zM24.8753,22.892c-0.3268,0.4157 -0.712,0.8684 -1.12,1.3475l-0.0799,0.0939c-1.7555,2.0648 -3.7452,4.405 -4.5516,7.3202 -0.114,0.4138 -0.2408,1.0329 -0.273,2.223l-6.4325,0c-0.0275,-1.2639 -0.1564,-1.9121 -0.2741,-2.3487 -0.807,-2.9538 -2.7932,-5.2586 -4.3894,-7.1109l-0.0267,-0.0312c-0.4511,-0.5231 -0.8771,-1.0173 -1.2557,-1.4989 -1.6378,-2.0796 -2.5035,-4.5733 -2.5035,-7.211 0,-6.4553 5.252,-11.7073 11.7073,-11.7073 6.4545,0 11.7057,5.252 11.7057,11.7073 0,2.6405 -0.8662,5.135 -2.5064,7.216z"/>
<path android:fillColor="#FF000000" android:pathData="M20.828,38.4088L10.4375,38.4088c-1.0959,0 -1.9844,0.8885 -1.9844,1.9844 0,1.0959 0.8885,1.9844 1.9844,1.9844l10.3907,0c1.0959,0 1.9844,-0.8885 1.9844,-1.9844 0,-1.0959 -0.8887,-1.9844 -1.9846,-1.9844z"/>
<path android:fillColor="#FF000000" android:pathData="m18.2303,42.9353l-5.1951,0c-1.0959,0 -1.9844,0.8885 -1.9844,1.9844 0,1.0959 0.8885,1.9844 1.9844,1.9844l5.1951,0c1.0959,0 1.9844,-0.8885 1.9844,-1.9844 0,-1.0959 -0.8885,-1.9844 -1.9844,-1.9844z"/>
</vector>
+8
View File
@@ -0,0 +1,8 @@
<vector android:height="24dp" android:viewportHeight="384"
android:viewportWidth="384" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#FF000000" android:pathData="M368,80h-48V16c0,-8.832 -7.168,-16 -16,-16H48C21.528,0 0,21.528 0,48v288c0,26.472 21.528,48 48,48h288c26.472,0 48,-21.528 48,-48V96C384,87.168 376.832,80 368,80zM48,352c-8.824,0 -16,-7.176 -16,-16V48c0,-8.824 7.176,-16 16,-16h240v64v240c0,5.616 1.024,10.984 2.8,16H48zM352,336c0,8.824 -7.176,16 -16,16c-8.824,0 -16,-7.176 -16,-16V112h32V336z"/>
<path android:fillColor="#FF000000" android:pathData="M240,80H80c-8.832,0 -16,7.168 -16,16c0,8.832 7.168,16 16,16h160c8.832,0 16,-7.168 16,-16C256,87.168 248.832,80 240,80z"/>
<path android:fillColor="#FF000000" android:pathData="M208,176H80c-8.832,0 -16,7.168 -16,16c0,8.832 7.168,16 16,16h128c8.832,0 16,-7.168 16,-16C224,183.168 216.832,176 208,176z"/>
<path android:fillColor="#FF000000" android:pathData="M192,224H80c-8.832,0 -16,7.168 -16,16c0,8.832 7.168,16 16,16h112c8.832,0 16,-7.168 16,-16C208,231.168 200.832,224 192,224z"/>
<path android:fillColor="#FF000000" android:pathData="M176,272H80c-8.832,0 -16,7.168 -16,16c0,8.832 7.168,16 16,16h96c8.832,0 16,-7.168 16,-16C192,279.168 184.832,272 176,272z"/>
</vector>
+10
View File
@@ -0,0 +1,10 @@
<vector android:height="24dp" android:viewportHeight="512"
android:viewportWidth="512" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#FF000000" android:pathData="m405.332,0h-298.664c-58.883,0.066 -106.602,47.785 -106.668,106.668v298.664c0.066,58.883 47.785,106.602 106.668,106.668h298.664c58.883,-0.066 106.602,-47.785 106.668,-106.668v-298.664c-0.066,-58.883 -47.785,-106.602 -106.668,-106.668zM469.332,106.668v128h-192v-192h128c35.332,0.039 63.961,28.668 64,64zM106.668,42.668h128v192h-192v-128c0.039,-35.332 28.668,-63.961 64,-64zM42.668,405.332v-128h192v192h-128c-35.332,-0.039 -63.961,-28.668 -64,-64zM405.332,469.332h-128v-192h192v128c-0.039,35.332 -28.668,63.961 -64,64zM405.332,469.332"/>
<path android:fillColor="#FF000000" android:pathData="m128,213.332h42.668v-42.664h42.664v-42.668h-42.664v-42.668h-42.668v42.668h-42.668v42.668h42.668zM128,213.332"/>
<path android:fillColor="#FF000000" android:pathData="m298.668,128h128v42.668h-128zM298.668,128"/>
<path android:fillColor="#FF000000" android:pathData="m205.328,336.66 l-26.656,-33.32 -40.004,32.008 -40.008,-32.008 -26.656,33.32 32.512,26.008 -32.512,26.008 26.656,33.316 40.008,-32.004 40.004,32.004 26.656,-33.316 -32.512,-26.008zM205.328,336.66"/>
<path android:fillColor="#FF000000" android:pathData="m302.48,394.16 l110.668,-90.664 27.039,33.004 -110.668,90.664zM302.48,394.16"/>
<path android:fillColor="#FF000000" android:pathData="m362.668,320c0,11.781 -9.551,21.332 -21.336,21.332 -11.781,0 -21.332,-9.551 -21.332,-21.332s9.551,-21.332 21.332,-21.332c11.785,0 21.336,9.551 21.336,21.332zM362.668,320"/>
<path android:fillColor="#FF000000" android:pathData="m426.668,405.332c0,11.785 -9.551,21.336 -21.336,21.336 -11.781,0 -21.332,-9.551 -21.332,-21.336 0,-11.781 9.551,-21.332 21.332,-21.332 11.785,0 21.336,9.551 21.336,21.332zM426.668,405.332"/>
</vector>
+4
View File
@@ -0,0 +1,4 @@
<vector android:height="24dp" android:viewportHeight="489.895"
android:viewportWidth="489.895" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#FF000000" android:pathData="M471.081,3.495c-5.693,-3.734 -12.826,-4.527 -19.2,-2.133l-256,106.667c-8.496,2.657 -14.449,10.311 -14.933,19.2v209.067c-19.386,-11.399 -41.512,-17.3 -64,-17.067c-59.733,0 -106.667,38.4 -106.667,85.333s46.933,85.333 106.667,85.333s106.667,-38.4 106.667,-85.333V248.828l213.333,-89.6v113.067c-19.386,-11.399 -41.512,-17.3 -64,-17.067c-59.733,0 -106.667,38.4 -106.667,85.333s46.933,85.333 106.667,85.333s106.667,-38.4 106.667,-85.333v-320C479.614,13.847 476.453,7.524 471.081,3.495zM116.948,447.228c-34.133,0 -64,-19.2 -64,-42.667s29.867,-42.667 64,-42.667c34.133,0 64,19.2 64,42.667S151.081,447.228 116.948,447.228zM372.948,383.228c-34.133,0 -64,-19.2 -64,-42.667s29.867,-42.667 64,-42.667s64,19.2 64,42.667S407.081,383.228 372.948,383.228zM436.948,112.295l-213.333,89.6v-59.733l213.333,-89.6V112.295z"/>
</vector>
+4
View File
@@ -0,0 +1,4 @@
<vector android:height="24dp" android:viewportHeight="384"
android:viewportWidth="384" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#FF000000" android:pathData="m327.793,56.207c-0.41,-0.406 -0.871,-0.719 -1.313,-1.07 -34.664,-34.074 -82.152,-55.137 -134.48,-55.137s-99.816,21.063 -134.48,55.137c-0.441,0.352 -0.902,0.664 -1.313,1.07 -0.406,0.41 -0.711,0.871 -1.07,1.313 -34.074,34.664 -55.137,82.152 -55.137,134.48s21.063,99.816 55.137,134.48c0.352,0.441 0.664,0.902 1.07,1.313 0.41,0.406 0.871,0.719 1.313,1.07 34.664,34.074 82.152,55.137 134.48,55.137s99.816,-21.063 134.48,-55.137c0.441,-0.352 0.902,-0.664 1.313,-1.07 0.406,-0.41 0.711,-0.871 1.07,-1.313 34.074,-34.664 55.137,-82.152 55.137,-134.48s-21.063,-99.816 -55.137,-134.48c-0.352,-0.441 -0.664,-0.902 -1.07,-1.313zM334.039,118.664c1.367,2.648 2.664,5.336 3.891,8.063 0.789,1.77 1.582,3.539 2.309,5.336 1.16,2.867 2.211,5.793 3.203,8.738 0.59,1.734 1.215,3.457 1.742,5.223 1.016,3.367 1.855,6.816 2.648,10.273 0.32,1.398 0.727,2.766 1.008,4.184 0.969,4.809 1.719,9.688 2.238,14.641 -31.773,-3.352 -60.75,-16.113 -84.23,-35.344l48.922,-48.922c0.645,0.793 1.246,1.617 1.887,2.426 2.031,2.582 4.031,5.191 5.902,7.895 1.051,1.512 2.016,3.082 3.016,4.625 1.633,2.535 3.219,5.109 4.715,7.742 0.949,1.68 1.863,3.395 2.75,5.121zM315.816,293.184 L214.625,192 244.113,162.512c29.453,24.945 66.488,41.176 107.117,44.711 -3.078,32.434 -15.855,62.066 -35.414,85.961zM160.473,348.848c-1.418,-0.289 -2.785,-0.688 -4.184,-1.008 -3.465,-0.793 -6.906,-1.633 -10.273,-2.648 -1.758,-0.527 -3.48,-1.16 -5.223,-1.742 -2.945,-1 -5.863,-2.043 -8.738,-3.203 -1.797,-0.727 -3.566,-1.52 -5.336,-2.309 -2.727,-1.227 -5.414,-2.523 -8.063,-3.891 -1.719,-0.895 -3.434,-1.801 -5.121,-2.75 -2.633,-1.488 -5.207,-3.082 -7.742,-4.711 -1.555,-0.992 -3.113,-1.969 -4.625,-3.02 -2.703,-1.871 -5.313,-3.871 -7.895,-5.902 -0.809,-0.633 -1.633,-1.238 -2.426,-1.887l48.922,-48.922c19.223,23.488 31.984,52.457 35.344,84.234 -4.953,-0.523 -9.832,-1.273 -14.641,-2.242zM49.961,265.336c-1.367,-2.648 -2.664,-5.336 -3.891,-8.063 -0.789,-1.77 -1.582,-3.539 -2.309,-5.336 -1.16,-2.867 -2.211,-5.793 -3.203,-8.738 -0.59,-1.734 -1.215,-3.457 -1.742,-5.223 -1.016,-3.367 -1.855,-6.816 -2.648,-10.273 -0.32,-1.398 -0.727,-2.766 -1.008,-4.184 -0.969,-4.809 -1.719,-9.688 -2.238,-14.641 31.773,3.352 60.75,16.113 84.23,35.344l-48.922,48.922c-0.645,-0.793 -1.246,-1.617 -1.887,-2.426 -2.031,-2.582 -4.031,-5.191 -5.902,-7.895 -1.051,-1.512 -2.016,-3.082 -3.016,-4.625 -1.633,-2.535 -3.219,-5.109 -4.715,-7.742 -0.949,-1.68 -1.863,-3.395 -2.75,-5.121zM68.184,90.816 L169.375,192 139.887,221.488c-29.453,-24.945 -66.488,-41.176 -107.117,-44.711 3.078,-32.434 15.855,-62.066 35.414,-85.961zM223.527,35.152c1.418,0.289 2.785,0.688 4.184,1.008 3.465,0.793 6.906,1.633 10.273,2.648 1.758,0.527 3.48,1.16 5.223,1.742 2.945,1 5.863,2.043 8.738,3.203 1.797,0.727 3.566,1.52 5.336,2.309 2.727,1.227 5.414,2.523 8.063,3.891 1.719,0.895 3.434,1.801 5.121,2.75 2.633,1.488 5.207,3.082 7.742,4.711 1.555,0.992 3.113,1.969 4.625,3.02 2.703,1.871 5.313,3.871 7.895,5.902 0.809,0.633 1.633,1.238 2.426,1.887l-48.922,48.922c-19.223,-23.488 -31.984,-52.457 -35.344,-84.234 4.953,0.523 9.832,1.273 14.641,2.242zM221.488,139.887 L192,169.375 90.816,68.184c23.895,-19.566 53.535,-32.336 85.969,-35.414 3.527,40.629 19.75,77.664 44.703,107.117zM162.512,244.113 L192,214.625 293.184,315.809c-23.895,19.566 -53.535,32.336 -85.969,35.414 -3.527,-40.621 -19.75,-77.656 -44.703,-107.109zM162.512,244.113"/>
</vector>
+4
View File
@@ -0,0 +1,4 @@
<vector android:height="24dp" android:viewportHeight="512"
android:viewportWidth="512.00037" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#FF000000" android:pathData="m484.887,62.008 l-34.895,-34.895c-17.484,-17.484 -40.73,-27.113 -65.461,-27.113 -24.727,0 -47.973,9.629 -65.457,27.113l-282.547,282.547c-2.156,2.156 -3.605,4.922 -4.152,7.922l-32.133,176.734c-0.879,4.844 0.672,9.809 4.152,13.289 2.836,2.84 6.664,4.395 10.605,4.395 0.891,0 1.789,-0.078 2.684,-0.242l176.734,-32.133c3,-0.543 5.766,-1.992 7.922,-4.152l282.547,-282.547c17.484,-17.484 27.113,-40.73 27.113,-65.461 0,-24.727 -9.629,-47.973 -27.113,-65.457zM459.719,79.266 L172.625,366.359c-7.891,-10.027 -16.953,-19.094 -26.984,-26.984l287.094,-287.094zM50.195,387.273 L59.543,335.863c61.578,5.879 110.715,55.02 116.594,116.594l-51.41,9.348c-7.195,-37.621 -36.91,-67.336 -74.531,-74.531zM340.289,48.328c11.816,-11.82 27.527,-18.328 44.246,-18.328 8.188,0 16.133,1.57 23.5,4.555l-288.238,288.234c-12.43,-6.383 -25.805,-11.176 -39.848,-14.125zM44.828,416.801c25.371,4.969 45.402,25 50.371,50.371l-61.566,11.195zM463.676,171.715 L203.336,432.051c-2.949,-14.043 -7.742,-27.418 -14.125,-39.848l288.234,-288.234c2.984,7.367 4.555,15.313 4.555,23.5 0,16.715 -6.508,32.426 -18.324,44.246zM463.676,171.715"/>
</vector>
@@ -0,0 +1,4 @@
<vector android:height="24dp" android:viewportHeight="512"
android:viewportWidth="512" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#FF000000" android:pathData="M492,472h-46v-61c0,-11.046 -8.954,-20 -20,-20H316V120h36v191c0,11.046 8.954,20 20,20c11.046,0 20,-8.954 20,-20V196.56c6.26,2.22 12.989,3.44 20,3.44c55.141,0 100,-44.86 100,-100S467.141,0 412,0H100C44.859,0 0,44.86 0,100s44.859,100 100,100c7.011,0 13.74,-1.22 20,-3.44V391H86c-11.046,0 -20,8.954 -20,20v61H20c-11.046,0 -20,8.954 -20,20c0,11.046 8.954,20 20,20h472c11.046,0 20,-8.954 20,-20C512,480.954 503.046,472 492,472zM100,160c-33.084,0 -60,-26.916 -60,-60s26.916,-60 60,-60h312c33.084,0 60,26.916 60,60s-26.916,60 -60,60c-11.028,0 -20,-8.972 -20,-20s8.972,-20 20,-20c11.046,0 20,-8.954 20,-20s-8.954,-20 -20,-20H100c-11.046,0 -20,8.954 -20,20s8.954,20 20,20c11.028,0 20,8.972 20,20S111.028,160 100,160zM276,120v271h-40V120H276zM196,120v271h-36V120H196zM406,472H106v-41h300V472z"/>
</vector>
+5
View File
@@ -0,0 +1,5 @@
<vector android:height="24dp" android:viewportHeight="502.16888"
android:viewportWidth="502" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#FF000000" android:pathData="m251.047,187.023c-35.332,0 -63.98,28.645 -63.98,63.98 0,35.328 28.648,63.977 63.98,63.977 35.336,0 63.977,-28.648 63.977,-63.977 -0.039,-35.32 -28.656,-63.941 -63.977,-63.98zM251.047,272.328c-11.777,0 -21.324,-9.547 -21.324,-21.324 0,-11.781 9.547,-21.332 21.324,-21.332 11.781,0 21.328,9.551 21.328,21.332 -0.016,11.77 -9.555,21.309 -21.328,21.324zM251.047,272.328"/>
<path android:fillColor="#FF000000" android:pathData="m479.391,22.656c-29.367,-29.363 -81.313,-30.211 -146.262,-2.379 -28.801,12.684 -56.289,28.152 -82.082,46.18 -25.789,-18.027 -53.281,-33.496 -82.078,-46.18 -64.945,-27.832 -116.895,-26.988 -146.262,2.379 -42.605,42.609 -22.988,131.824 43.52,228.348 -66.508,96.52 -86.125,185.734 -43.52,228.34 15.098,15.098 36.16,22.656 61.891,22.656 24.32,0 52.816,-6.758 84.371,-20.277 28.797,-12.684 56.289,-28.152 82.078,-46.18 25.793,18.027 53.281,33.496 82.082,46.18 31.559,13.52 60.047,20.277 84.367,20.277 25.723,0 46.797,-7.559 61.895,-22.66 42.598,-42.602 22.984,-131.82 -43.523,-228.34 66.512,-96.52 86.125,-185.734 43.523,-228.344zM349.93,59.484c26.199,-11.23 49.438,-16.918 67.543,-16.918 13.977,0 24.898,3.395 31.758,10.254 22.68,22.68 7.504,86.875 -40.656,161.488 -17.852,-22.27 -36.93,-43.539 -57.141,-63.691 -20.242,-20.27 -41.625,-39.371 -64.035,-57.219 19.848,-13.047 40.766,-24.395 62.531,-33.914zM382.754,251.004c-18.891,24.762 -39.43,48.223 -61.48,70.219 -22.02,22.086 -45.48,42.688 -70.227,61.664 -24.742,-18.977 -48.203,-39.578 -70.223,-61.664 -22.051,-21.996 -42.59,-45.457 -61.48,-70.219 18.891,-24.77 39.43,-48.23 61.48,-70.227 22.02,-22.082 45.48,-42.688 70.223,-61.664 24.746,18.977 48.207,39.582 70.227,61.664 22.051,21.996 42.59,45.457 61.48,70.227zM52.867,52.82c6.855,-6.859 17.77,-10.254 31.758,-10.254 18.102,0 41.344,5.688 67.539,16.918 21.77,9.52 42.688,20.863 62.539,33.914 -22.414,17.844 -43.793,36.945 -64.039,57.215 -20.215,20.156 -39.289,41.422 -57.141,63.695 -48.16,-74.613 -63.336,-138.809 -40.656,-161.488zM152.164,442.516c-46.441,19.906 -83.563,22.395 -99.297,6.664 -22.68,-22.68 -7.508,-86.875 40.652,-161.488 17.855,22.27 36.93,43.539 57.145,63.691 20.242,20.27 41.621,39.371 64.035,57.219 -19.848,13.047 -40.766,24.395 -62.535,33.914zM449.23,449.18c-15.73,15.73 -52.855,13.242 -99.301,-6.664 -21.766,-9.52 -42.684,-20.863 -62.531,-33.914 22.41,-17.844 43.793,-36.945 64.035,-57.215 20.211,-20.156 39.289,-41.422 57.141,-63.695 48.16,74.613 63.336,138.809 40.656,161.488zM449.23,449.18"/>
</vector>
@@ -0,0 +1,4 @@
<vector android:height="24dp" android:viewportHeight="512"
android:viewportWidth="512" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#FF000000" android:pathData="M365,95l-18,24l34,25.5V202h-40v-37c0,-21.975 -12.959,-40.973 -31.632,-49.775C319.73,103.016 326,87.231 326,70c0,-38.598 -31.401,-70 -70,-70s-70,31.402 -70,70c0,17.231 6.27,33.016 16.632,45.225C183.959,124.027 171,143.025 171,165v37h-40v-57.5l34,-25.5l-18,-24l-46,34.5V322h60v190h190V322h60V129.5L365,95zM256,30c22.056,0 40,17.944 40,40s-17.944,40 -40,40s-40,-17.944 -40,-40S233.944,30 256,30zM201,165c0,-13.785 11.215,-25 25,-25h60c13.785,0 25,11.215 25,25v37H201V165zM321,482H191V292h130V482zM381,292h-30v-30H161v30h-30v-60h250V292z"/>
</vector>
+6
View File
@@ -0,0 +1,6 @@
<vector android:height="24dp" android:viewportHeight="512"
android:viewportWidth="512" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#FF000000" android:pathData="M256,378.5m-25,0a25,25 0,1 1,50 0a25,25 0,1 1,-50 0"/>
<path android:fillColor="#FF000000" android:pathData="M256,0C114.516,0 0,114.497 0,256c0,141.484 114.497,256 256,256c141.484,0 256,-114.497 256,-256C512,114.516 397.503,0 256,0zM256,472c-119.377,0 -216,-96.607 -216,-216c0,-119.377 96.607,-216 216,-216c119.377,0 216,96.607 216,216C472,375.377 375.393,472 256,472z"/>
<path android:fillColor="#FF000000" android:pathData="M256,128.5c-44.112,0 -80,35.888 -80,80c0,11.046 8.954,20 20,20s20,-8.954 20,-20c0,-22.056 17.944,-40 40,-40c22.056,0 40,17.944 40,40c0,22.056 -17.944,40 -40,40c-11.046,0 -20,8.954 -20,20v50c0,11.046 8.954,20 20,20c11.046,0 20,-8.954 20,-20v-32.531c34.466,-8.903 60,-40.26 60,-77.469C336,164.388 300.112,128.5 256,128.5z"/>
</vector>
@@ -0,0 +1,5 @@
<vector android:height="24dp" android:viewportHeight="384"
android:viewportWidth="384.004" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#FF000000" android:pathData="m16.008,288.004c4.094,0 8.191,-1.563 11.309,-4.691l4.691,-4.688v89.379c0,8.832 7.168,16 16,16h288c8.832,0 16,-7.168 16,-16v-89.379l4.688,4.688c3.117,3.129 7.215,4.691 11.313,4.691 4.094,0 8.191,-1.563 11.309,-4.691 6.25,-6.246 6.25,-16.375 0,-22.621l-31.992,-31.992c-0.008,-0.008 -0.016,-0.016 -0.023,-0.023l-75.293,-75.297v-41.375c0,-8.832 -7.168,-16 -16,-16h-48v-24h24c8.832,0 16,-7.168 16,-16 0,-8.832 -7.168,-16 -16,-16h-24v-24c0,-8.832 -7.168,-16 -16,-16 -8.832,0 -16,7.168 -16,16v24h-24c-8.832,0 -16,7.168 -16,16 0,8.832 7.168,16 16,16h24v24h-48c-8.832,0 -16,7.168 -16,16v41.375l-75.305,75.305c-0.008,0.008 -0.016,0.016 -0.023,0.023l-31.992,31.992c-6.25,6.246 -6.25,16.375 0,22.621 3.125,3.121 7.223,4.684 11.32,4.684zM320.008,246.625v105.379h-48v-153.379zM144.008,128.004h96v224h-96zM112.008,352.004h-48v-105.379l48,-48zM112.008,352.004"/>
<path android:fillColor="#FF000000" android:pathData="m192.008,216.004c13.23,0 24,-10.77 24,-24 0,-13.234 -10.77,-24 -24,-24 -13.234,0 -24,10.766 -24,24 0,13.23 10.766,24 24,24zM192.008,216.004"/>
</vector>
+13
View File
@@ -0,0 +1,13 @@
<vector android:height="24dp" android:viewportHeight="512"
android:viewportWidth="512" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#FF000000" android:pathData="m48.965,187.48c-5.523,0 -10,4.477 -10,10v16.535c0,5.52 4.477,10 10,10 5.52,0 10,-4.48 10,-10v-16.535c0,-5.523 -4.48,-10 -10,-10zM48.965,187.48"/>
<path android:fillColor="#FF000000" android:pathData="m462.367,224.016c5.523,0 10,-4.48 10,-10v-16.535c0,-5.523 -4.477,-10 -10,-10 -5.523,0 -10,4.477 -10,10v16.535c0,5.52 4.477,10 10,10zM462.367,224.016"/>
<path android:fillColor="#FF000000" android:pathData="m246.77,262.328c1.598,3.902 5.668,6.449 9.883,6.16 4.121,-0.285 7.699,-3.133 8.91,-7.078 1.207,-3.934 -0.223,-8.324 -3.477,-10.832 -3.398,-2.617 -8.25,-2.738 -11.773,-0.293 -3.816,2.652 -5.336,7.746 -3.543,12.043zM246.77,262.328"/>
<path android:fillColor="#FF000000" android:pathData="m502,153.496h-1.004v-7.691c0,-5.523 -4.477,-10 -10,-10 -5.523,0 -10,4.477 -10,10v7.691h-8.629v-7.691c0,-5.523 -4.477,-10 -10,-10 -5.523,0 -10,4.477 -10,10v7.691h-8.629v-7.691c0,-5.523 -4.477,-10 -10,-10 -5.52,0 -10,4.477 -10,10v7.719c-5.266,0.285 -9.449,4.633 -9.449,9.973v44.723h-16.824v-167.219c0,-5.523 -4.48,-10 -10,-10h-43.898c-5.523,0 -10,4.477 -10,10v13.379h-9.094v-13.379c0,-5.523 -4.48,-10 -10,-10h-43.902c-5.52,0 -10,4.477 -10,10v13.379h-9.09v-13.379c0,-5.523 -4.477,-10 -10,-10h-43.902c-5.523,0 -10,4.477 -10,10v13.379h-9.094v-13.379c0,-5.523 -4.477,-10 -10,-10h-43.898c-5.523,0 -10,4.477 -10,10v167.219h-17.336v-44.727c0,-5.406 -4.297,-9.801 -9.656,-9.98v-7.711c0,-5.52 -4.48,-10 -10,-10 -5.523,0 -10,4.48 -10,10v7.691h-8.629v-7.691c0,-5.52 -4.477,-10 -10,-10 -5.523,0 -10,4.48 -10,10v7.691h-8.629v-7.691c0,-5.52 -4.477,-10 -10,-10 -5.523,0 -10,4.48 -10,10v7.691h-0.336c-5.523,0 -10,4.48 -10,10v238.5c0,5.52 4.477,10 10,10h3.563v49.789h-3.563c-5.523,0 -10,4.48 -10,10 0,5.523 4.477,10 10,10h492c5.523,0 10,-4.477 10,-10 0,-5.52 -4.477,-10 -10,-10h-7.234v-49.789h7.234c5.523,0 10,-4.48 10,-10v-238.496c0,-5.523 -4.477,-10 -10,-10zM134.586,51h23.898v13.379c0,5.523 4.48,10 10,10h29.094c5.523,0 10,-4.477 10,-10v-13.379h23.902v13.379c0,5.523 4.477,10 10,10h29.09c5.523,0 10,-4.477 10,-10v-13.379h23.902v13.379c0,5.523 4.477,10 10,10h29.094c5.52,0 10,-4.477 10,-10v-13.379h23.898v157.219h-242.879zM424.289,228.219c5.52,0 10,-4.48 10,-10v-44.727h57.711v75.016h-197.051c-5.52,0 -10,4.48 -10,10 0,5.523 4.48,10 10,10h197.051v20.918h-472v-20.918h197.031c5.523,0 10,-4.477 10,-10 0,-5.52 -4.477,-10 -10,-10h-197.031v-75.016h57.25v44.727c0,5.52 4.477,10 10,10zM492,391.992h-13.48v-6.914c0,-22.313 -18.156,-40.461 -40.473,-40.461 -22.313,0 -40.461,18.148 -40.461,40.461v6.914h-10.461v-6.914c0,-22.313 -18.152,-40.461 -40.461,-40.461 -22.313,0 -40.461,18.148 -40.461,40.461v6.914h-10.465v-28.285c0,-22.309 -18.152,-40.461 -40.469,-40.461 -22.313,0 -40.461,18.152 -40.461,40.461v28.285h-10.461v-6.914c0,-22.313 -18.152,-40.461 -40.461,-40.461 -22.313,0 -40.461,18.148 -40.461,40.461v6.914h-10.461v-6.914c0,-22.313 -18.152,-40.461 -40.461,-40.461 -22.316,0 -40.473,18.148 -40.473,40.461v6.914h-12.031v-82.563h90.043v29.266c0,5.523 4.477,10 10,10 5.523,0 10,-4.477 10,-10v-29.266h69.16v15.586c0,5.52 4.477,10 10,10s10,-4.48 10,-10v-15.586h71.805v15.586c0,5.52 4.48,10 10,10 5.523,0 10,-4.48 10,-10v-15.586h71.453v29.266c0,5.523 4.477,10 10,10 5.52,0 10,-4.477 10,-10v-29.266h89.539zM133.426,411.992c5.52,0 10,-4.48 10,-10v-16.914c0,-11.281 9.176,-20.461 20.461,-20.461 11.281,0 20.461,9.18 20.461,20.461v16.914c0,5.52 4.477,10 10,10h4.855v49.789h-71.809v-49.789zM219.203,411.992h5.605c5.523,0 10,-4.48 10,-10v-38.285c0,-11.281 9.18,-20.461 20.461,-20.461 11.285,0 20.469,9.18 20.469,20.461v38.285c0,5.52 4.48,10 10,10h5.27v49.789h-71.805zM311.008,411.992h5.195c5.52,0 10,-4.48 10,-10v-16.914c0,-11.281 9.18,-20.461 20.461,-20.461s20.461,9.18 20.461,20.461v16.914c0,5.52 4.477,10 10,10h5.336v49.789h-71.453zM33.563,411.992h8.469c5.523,0 10,-4.48 10,-10v-16.914c0,-11.281 9.184,-20.461 20.469,-20.461s20.461,9.18 20.461,20.461v16.914c0,5.52 4.477,10 10,10h4.434v49.789h-73.832zM474.766,461.781h-72.305v-49.789h5.125c5.523,0 10,-4.48 10,-10v-16.914c0,-11.281 9.18,-20.461 20.461,-20.461 11.289,0 20.473,9.18 20.473,20.461v16.914c0,5.52 4.477,10 10,10h6.246zM474.766,461.781"/>
<path android:fillColor="#FF000000" android:pathData="m169.746,123.281c5.523,0 10,-4.477 10,-10v-10.195c0,-5.523 -4.477,-10 -10,-10 -5.523,0 -10,4.477 -10,10v10.195c0,5.523 4.477,10 10,10zM169.746,123.281"/>
<path android:fillColor="#FF000000" android:pathData="m213.535,123.281c5.523,0 10,-4.477 10,-10v-10.195c0,-5.523 -4.477,-10 -10,-10 -5.523,0 -10,4.477 -10,10v10.195c0,5.523 4.477,10 10,10zM213.535,123.281"/>
<path android:fillColor="#FF000000" android:pathData="m257.32,123.281c5.523,0 10,-4.477 10,-10v-10.195c0,-5.523 -4.477,-10 -10,-10 -5.52,0 -10,4.477 -10,10v10.195c0,5.523 4.48,10 10,10zM257.32,123.281"/>
<path android:fillColor="#FF000000" android:pathData="m301.109,123.281c5.523,0 10,-4.477 10,-10v-10.195c0,-5.523 -4.477,-10 -10,-10 -5.52,0 -10,4.477 -10,10v10.195c0,5.523 4.48,10 10,10zM301.109,123.281"/>
<path android:fillColor="#FF000000" android:pathData="m344.898,93.086c-5.523,0 -10,4.477 -10,10v10.195c0,5.523 4.477,10 10,10 5.523,0 10,-4.477 10,-10v-10.195c0,-5.523 -4.477,-10 -10,-10zM344.898,93.086"/>
<path android:fillColor="#FF000000" android:pathData="m344.898,139.938h-175.152c-5.523,0 -10,4.477 -10,10v30.332c0,5.523 4.477,10 10,10h29.094c5.523,0 10,-4.477 10,-10v-20.332h22.637v20.332c0,5.523 4.477,10 10,10h29.094c5.523,0 10,-4.477 10,-10v-20.332h25.234v20.332c0,5.523 4.477,10 10,10h29.094c5.523,0 10,-4.477 10,-10v-30.332c0,-5.523 -4.477,-10 -10,-10zM188.84,170.27h-9.094v-10.332h9.094zM260.57,170.27h-9.094v-10.332h9.094zM334.898,170.27h-9.094v-10.332h9.094zM334.898,170.27"/>
</vector>
+9
View File
@@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="512dp"
android:height="512dp"
android:viewportWidth="512"
android:viewportHeight="512">
<path
android:fillColor="#FF000000"
android:pathData="M504.502,75.496c-9.997,-9.998 -26.205,-9.998 -36.204,0L161.594,382.203L43.702,264.311c-9.997,-9.998 -26.205,-9.997 -36.204,0c-9.998,9.997 -9.998,26.205 0,36.203l135.994,135.992c9.994,9.997 26.214,9.99 36.204,0L504.502,111.7C514.5,101.703 514.499,85.494 504.502,75.496z"/>
</vector>
+9
View File
@@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="512dp"
android:height="512dp"
android:viewportWidth="512"
android:viewportHeight="512.0002">
<path
android:fillColor="#FF000000"
android:pathData="m428.055,144.055c12.051,-24.066 11.961,-47.961 11.945,-49.285 -0.094,-8.023 -4.973,-15.215 -12.395,-18.266 -7.422,-3.051 -15.945,-1.375 -21.656,4.262 -7.785,7.688 -10.891,8.207 -11.219,8.242 -1.66,0.195 -6.441,-1.742 -10.656,-3.43 -11.152,-4.465 -26.426,-10.578 -50.418,-10.578 -26.188,0 -46.949,11.582 -62.297,25.176 1.707,-30.617 9.461,-53.621 22.262,-65.531 8.09,-7.523 8.547,-20.18 1.023,-28.266 -7.523,-8.086 -20.176,-8.547 -28.266,-1.023 -23.754,22.098 -32.262,56.98 -34.617,87.688 -14.172,-10.273 -31.977,-18.043 -53.418,-18.043 -23.988,0 -39.266,6.113 -50.418,10.578 -4.215,1.688 -8.984,3.625 -10.656,3.43 -0.328,-0.035 -3.434,-0.555 -11.219,-8.242 -5.711,-5.637 -14.234,-7.313 -21.656,-4.262 -7.422,3.051 -12.301,10.242 -12.395,18.266 -0.016,1.332 -0.102,25.461 12.129,49.645 -44.539,23.016 -84.129,75.758 -84.129,145.586 0,32.684 7.27,95.371 55.938,148.023 21.375,23.121 48.109,41.141 79.465,53.555 34.234,13.551 74.137,20.422 118.598,20.422 51.25,0 96.512,-9.09 134.527,-27.016 9.992,-4.707 14.273,-16.625 9.563,-26.617 -4.711,-9.988 -16.625,-14.273 -26.617,-9.563 -32.645,15.391 -72.168,23.195 -117.473,23.195 -157.781,0 -214,-94.016 -214,-182 0,-58.012 34.695,-100.02 70.777,-113.805 7.777,5.672 16.512,9.949 26.129,12.863 -2.867,6.539 -4.711,12.395 -6.301,17.438 -1.285,4.074 -2.883,9.148 -4.02,10.266 -0.094,0.09 -2.363,2.203 -13.414,3.219 -8.137,0.746 -15,6.363 -17.336,14.191 -2.34,7.832 0.32,16.293 6.715,21.379 1.137,0.902 27.422,21.449 64.914,21.449 1.25,0 2.52,-0.023 3.797,-0.07 11.594,-0.43 41.348,-3.914 67.16,-26.906 5.789,-5.156 11.953,-11.883 17.578,-20.484 5.625,8.605 11.785,15.328 17.574,20.484 25.813,22.992 55.566,26.477 67.16,26.906 1.281,0.047 2.543,0.07 3.801,0.07 37.32,-0.004 64.414,-20.305 65.586,-21.195 6.559,-4.996 9.379,-13.508 7.102,-21.434 -2.277,-7.926 -9.188,-13.641 -17.398,-14.391 -11.059,-1.016 -13.57,-3.168 -13.82,-3.41 -1.313,-1.27 -2.914,-6.07 -4.465,-10.715 -1.625,-4.879 -3.516,-10.531 -6.34,-16.828 9.805,-2.984 18.68,-7.398 26.563,-13.25 47.242,20.973 70.238,58.391 70.238,114.223 0,36.055 -10.961,71.797 -30.867,100.641 -6.273,9.09 -3.988,21.547 5.102,27.82 3.469,2.395 7.426,3.543 11.344,3.543 6.352,0 12.598,-3.023 16.48,-8.645 24.465,-35.457 37.941,-79.266 37.941,-123.359 0,-67.434 -28.941,-117.527 -83.945,-145.945zM142.793,122.715c9.473,-3.793 19.27,-7.715 35.551,-7.715 13.836,0 25.582,6.359 34.855,14.293 -15.957,1.582 -34.23,7 -51.57,23.996 -18.824,-1.777 -32.141,-9.816 -40.496,-24.418 7.957,-0.672 14.895,-3.449 21.66,-6.156zM211.816,220.152c-16.566,14.762 -36.363,16.594 -42.039,16.805 -2.902,0.109 -5.715,0.008 -8.418,-0.246 3.52,-5.875 5.48,-12.105 7.398,-18.199 3.047,-9.672 6.199,-19.676 16.539,-31.973 12.363,-14.707 23.969,-17.68 39.824,-17.844 3.637,-0.039 7.066,0.074 10.172,0.266 -2.301,22.156 -10.168,39.336 -23.477,51.191zM342.223,236.957c-5.676,-0.211 -25.473,-2.047 -42.039,-16.805 -13.309,-11.855 -21.176,-29.035 -23.473,-51.191 3.102,-0.191 6.531,-0.313 10.168,-0.266 15.855,0.164 27.461,3.137 39.828,17.844 10.316,12.273 13.656,22.289 16.891,31.973 2.027,6.082 4.102,12.301 7.68,18.145 -2.906,0.297 -5.941,0.414 -9.055,0.301zM350.375,153.289c-17.344,-16.996 -35.617,-22.414 -51.574,-23.996 9.27,-7.934 21.02,-14.293 34.855,-14.293 16.281,0 26.078,3.922 35.551,7.715 6.766,2.707 13.703,5.484 21.66,6.156 -8.355,14.602 -21.672,22.641 -40.492,24.418zM350.375,153.289"/>
</vector>
+4
View File
@@ -0,0 +1,4 @@
<vector android:height="24dp" android:viewportHeight="512"
android:viewportWidth="512" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#FF000000" android:pathData="M495.304,119.652V47.304h-33.391v72.348h-16.696v33.391h16.696v211.478h-44.522v-94.609c0,-29.793 -8.133,-57.712 -22.269,-81.692l0.008,-68.569h16.696V86.261H395.13V13.913h-33.391v72.348h-16.696v33.391h16.696v28.432c-13.205,-11.477 -28.29,-20.837 -44.721,-27.571c-1.979,-25.884 -20.114,-47.304 -44.323,-54.18V2.783h-33.391v63.55c-24.209,6.875 -42.344,28.296 -44.323,54.18c-16.431,6.735 -31.516,16.096 -44.721,27.571v-28.432h16.696V86.261h-16.696V13.913H116.87v72.348h-16.696v33.391h16.696l0.006,68.572c-14.133,23.978 -22.266,51.897 -22.266,81.688v94.609H50.087V153.043h16.696v-33.391H50.087V47.304H16.696v72.348H0v33.391h16.696v211.478v144.696h478.609V364.522V153.043H512v-33.391H495.304zM256,97.391c9.826,0 18.473,5.124 23.425,12.836c-7.65,-1.116 -15.47,-1.705 -23.425,-1.705c-7.956,0 -15.775,0.589 -23.425,1.705C237.527,102.516 246.174,97.391 256,97.391zM256,141.913c64.922,0 118.705,48.584 126.911,111.304H129.089C137.295,190.497 191.078,141.913 256,141.913zM128,286.609h256v77.913h-44.522v-17.599L256,319.096l-83.478,27.826v17.599H128V286.609zM461.913,475.826h-38.956v-22.261c0,-9.22 -7.475,-16.696 -16.696,-16.696s-16.696,7.475 -16.696,16.696v22.261h-22.261v-22.261c0,-9.22 -7.475,-16.696 -16.696,-16.696s-16.696,7.475 -16.696,16.696v22.261h-22.261v-22.261c0,-9.22 -7.475,-16.696 -16.696,-16.696s-16.696,7.475 -16.696,16.696v22.261h-44.522v-22.261c0,-9.22 -7.475,-16.696 -16.696,-16.696c-9.22,0 -16.696,7.475 -16.696,16.696v22.261h-22.261v-22.261c0,-9.22 -7.475,-16.696 -16.696,-16.696s-16.696,7.475 -16.696,16.696v22.261h-22.261v-22.261c0,-9.22 -7.475,-16.696 -16.696,-16.696s-16.696,7.475 -16.696,16.696v22.261H50.087v-77.913h44.522h83.478h27.826v-26.922L256,354.295l50.087,16.696v26.922h27.826h83.478h44.522V475.826z"/>
</vector>
+4
View File
@@ -0,0 +1,4 @@
<vector android:height="24dp" android:viewportHeight="383"
android:viewportWidth="383.996" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#FF000000" android:pathData="m44.688,362.809c3.125,3.129 7.215,4.688 11.309,4.688 4.098,0 8.188,-1.559 11.313,-4.688l184.688,-184.688 40.691,40.688c3.125,3.129 7.215,4.688 11.309,4.688 4.098,0 8.188,-1.559 11.313,-4.688l64,-64c6.25,-6.246 6.25,-16.375 0,-22.621l-111.992,-111.992c-0.742,-0.754 -1.566,-1.418 -2.453,-2.008 -0.379,-0.258 -0.793,-0.426 -1.184,-0.648 -0.523,-0.289 -1.02,-0.602 -1.57,-0.824 -0.52,-0.219 -1.063,-0.336 -1.598,-0.496 -0.465,-0.137 -0.906,-0.313 -1.387,-0.41 -1.031,-0.199 -2.078,-0.313 -3.129,-0.313h-64c-1.047,0 -2.094,0.113 -3.133,0.313 -0.48,0.098 -0.922,0.273 -1.387,0.41 -0.535,0.16 -1.078,0.277 -1.598,0.496 -0.555,0.223 -1.051,0.535 -1.57,0.824 -0.391,0.215 -0.805,0.391 -1.184,0.648 -0.879,0.59 -1.703,1.254 -2.453,2.008l-31.992,31.992c-6.25,6.246 -6.25,16.375 0,22.621l40.688,40.688 -36.688,36.691c-6.25,6.246 -6.25,16.375 0,22.621 3.125,3.129 7.215,4.688 11.309,4.688 4.098,0 8.188,-1.559 11.313,-4.688l36.688,-36.688 17.379,17.375 -173.371,173.371 -17.375,-17.371 92.688,-92.688c6.25,-6.246 6.25,-16.375 0,-22.621 -6.246,-6.25 -16.375,-6.25 -22.621,0l-104,104c-6.25,6.246 -6.25,16.375 0,22.621zM198.621,47.496h50.754l96,96 -41.379,41.371 -121.375,-121.371zM198.621,47.496"/>
</vector>
+8
View File
@@ -0,0 +1,8 @@
<vector android:height="24dp" android:viewportHeight="512"
android:viewportWidth="512" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#FF000000" android:pathData="M352.459,220c0,-11.046 -8.954,-20 -20,-20h-206c-11.046,0 -20,8.954 -20,20s8.954,20 20,20h206C343.505,240 352.459,231.046 352.459,220z"/>
<path android:fillColor="#FF000000" android:pathData="M126.459,280c-11.046,0 -20,8.954 -20,20c0,11.046 8.954,20 20,20H251.57c11.046,0 20,-8.954 20,-20c0,-11.046 -8.954,-20 -20,-20H126.459z"/>
<path android:fillColor="#FF000000" android:pathData="M173.459,472H106.57c-22.056,0 -40,-17.944 -40,-40V80c0,-22.056 17.944,-40 40,-40h245.889c22.056,0 40,17.944 40,40v123c0,11.046 8.954,20 20,20c11.046,0 20,-8.954 20,-20V80c0,-44.112 -35.888,-80 -80,-80H106.57c-44.112,0 -80,35.888 -80,80v352c0,44.112 35.888,80 80,80h66.889c11.046,0 20,-8.954 20,-20C193.459,480.954 184.505,472 173.459,472z"/>
<path android:fillColor="#FF000000" android:pathData="M467.884,289.572c-23.394,-23.394 -61.458,-23.395 -84.837,-0.016l-109.803,109.56c-2.332,2.327 -4.052,5.193 -5.01,8.345l-23.913,78.725c-2.12,6.98 -0.273,14.559 4.821,19.78c3.816,3.911 9,6.034 14.317,6.034c1.779,0 3.575,-0.238 5.338,-0.727l80.725,-22.361c3.322,-0.92 6.35,-2.683 8.79,-5.119l109.573,-109.367C491.279,351.032 491.279,312.968 467.884,289.572zM333.776,451.768l-40.612,11.25l11.885,-39.129l74.089,-73.925l28.29,28.29L333.776,451.768zM439.615,346.13l-3.875,3.867l-28.285,-28.285l3.862,-3.854c7.798,-7.798 20.486,-7.798 28.284,0C447.399,325.656 447.399,338.344 439.615,346.13z"/>
<path android:fillColor="#FF000000" android:pathData="M332.459,120h-206c-11.046,0 -20,8.954 -20,20s8.954,20 20,20h206c11.046,0 20,-8.954 20,-20S343.505,120 332.459,120z"/>
</vector>
+4
View File
@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" android:opacity="opaque">
<item android:drawable="?attr/colorBackground"/>
</layer-list>
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,326 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/coordinatorLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="?attr/colorBackground"
android:fitsSystemWindows="true"
tools:context=".FirstTime">
<androidx.core.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/constraintFirst"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layoutAnimation="@anim/layout_animation_fall_down">
<LinearLayout
android:layout_width="0px"
android:layout_height="0px"
android:focusable="true"
android:focusableInTouchMode="true"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/txtWelcome"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="@string/welcome"
android:textAlignment="center"
android:textColor="?attr/colorText"
android:textSize="30sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/txtsetupthings"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginEnd="8dp"
android:text="@string/firstsomethings"
android:textAlignment="center"
android:textColor="?attr/colorText"
android:textSize="14sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/txtWelcome" />
<TextView
android:id="@+id/txttellmename"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="16dp"
android:layout_marginEnd="8dp"
android:text="@string/tellmename"
android:textAlignment="center"
android:textColor="?attr/colorText"
android:textSize="14sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/txtsetupthings" />
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/txtLayoutClasses"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="56dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="56dp"
android:hint="@string/yourname"
android:textColorHint="?attr/colorHint"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/txttellmename"
android:importantForAutofill="no">
<EditText
android:id="@+id/txtName"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="16dp"
android:layout_marginEnd="8dp"
android:animateLayoutChanges="true"
android:ems="10"
android:gravity="center_horizontal"
android:imeOptions="flagNoExtractUi"
android:inputType="textNoSuggestions"
android:singleLine="true"
android:textAlignment="center"
android:textAppearance="@style/TextAppearance.AppCompat"
android:textColor="?attr/colorText"
android:textSize="16sp"
android:theme="@style/EditTextTheme" />
</com.google.android.material.textfield.TextInputLayout>
<TextView
android:id="@+id/txtNextClass"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="16dp"
android:layout_marginEnd="8dp"
android:text="@string/nextclass"
android:textAlignment="center"
android:textColor="?attr/colorText"
android:textSize="14sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/txtLayoutClasses" />
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/txtLayoutClass"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="56dp"
android:layout_marginTop="8dp"
android:hint="@string/yourclass"
android:textColorHint="?attr/colorHint"
app:layout_constraintEnd_toStartOf="@+id/chipHelpClasses"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/txtNextClass"
android:importantForAutofill="no">
<EditText
android:id="@+id/txtClasses"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="16dp"
android:layout_marginEnd="8dp"
android:animateLayoutChanges="true"
android:ems="10"
android:gravity="center_horizontal"
android:imeOptions="flagNoExtractUi"
android:inputType="textNoSuggestions"
android:singleLine="true"
android:textAlignment="center"
android:textAppearance="@style/TextAppearance.AppCompat"
android:textColor="?attr/colorText"
android:textSize="16sp"
android:theme="@style/EditTextTheme" />
</com.google.android.material.textfield.TextInputLayout>
<ImageButton
android:id="@+id/chipHelpClasses"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="8dp"
android:backgroundTint="@android:color/transparent"
android:src="@drawable/ic_qmark"
android:tint="?attr/colorText"
app:layout_constraintBottom_toBottomOf="@+id/txtLayoutClass"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@+id/txtLayoutClass" />
<TextView
android:id="@+id/txtSenior"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="32dp"
android:layout_marginTop="16dp"
android:layout_marginEnd="32dp"
android:text="@string/seniorsetup"
android:textAlignment="center"
android:textColor="?attr/colorText"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/txtLayoutClass" />
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/txtLayoutCourses"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="56dp"
android:layout_marginTop="8dp"
android:hint="@string/yourcourses"
android:textColorHint="?attr/colorHint"
app:layout_constraintEnd_toStartOf="@+id/chipHelpCourses"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/txtSenior">
<EditText
android:id="@+id/txtCourses"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="16dp"
android:layout_marginEnd="8dp"
android:animateLayoutChanges="true"
android:ems="10"
android:gravity="center_horizontal"
android:imeOptions="flagNoExtractUi"
android:inputType="textNoSuggestions"
android:singleLine="true"
android:textAlignment="center"
android:textAppearance="@style/TextAppearance.AppCompat"
android:textColor="?attr/colorText"
android:textSize="16sp"
android:theme="@style/EditTextTheme"
android:importantForAutofill="no"/>
</com.google.android.material.textfield.TextInputLayout>
<ImageButton
android:id="@+id/chipHelpCourses"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="8dp"
android:backgroundTint="@android:color/transparent"
android:src="@drawable/ic_qmark"
android:tint="?attr/colorText"
app:layout_constraintBottom_toBottomOf="@+id/txtLayoutCourses"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@+id/txtLayoutCourses" />
<TextView
android:id="@+id/txtMore"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="16dp"
android:layout_marginEnd="8dp"
android:text="@string/moresettings"
android:textColor="?attr/colorText"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/txtLayoutCourses" />
<CheckBox
android:id="@+id/cbDark"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="32dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="32dp"
android:text="@string/enabledarkmode"
android:textAlignment="viewStart"
android:textColor="?attr/colorText"
android:textSize="14sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/txtMore" />
<CheckBox
android:id="@+id/cbNotif"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="32dp"
android:layout_marginEnd="32dp"
android:text="@string/wantnotif"
android:textAlignment="viewStart"
android:textColor="?attr/colorText"
android:textSize="14sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/cbDark" />
<CheckBox
android:id="@+id/cbPersonalised"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="32dp"
android:layout_marginEnd="32dp"
android:text="@string/personalised"
android:textAlignment="viewStart"
android:textColor="?attr/colorText"
android:textSize="14sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/cbNotif" />
<com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton
android:id="@+id/efab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="32dp"
android:layout_marginEnd="8dp"
android:layout_marginBottom="32dp"
android:backgroundTint="?attr/colorAccent"
android:text="@string/letsgo"
android:textColor="?attr/colorBackground"
app:icon="@drawable/ic_tick"
app:iconTint="?attr/colorBackground"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/cbPersonalised" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.core.widget.NestedScrollView>
<LinearLayout
android:id="@+id/linearInflation"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="?attr/colorBackground"
android:orientation="vertical"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.coordinatorlayout.widget.CoordinatorLayout>
+16
View File
@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.drawerlayout.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:openDrawer="start"
android:background="?attr/colorBackground">
<include
layout="@layout/app_bar_main"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</androidx.drawerlayout.widget.DrawerLayout>
+120
View File
@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<com.google.android.material.appbar.AppBarLayout
android:id="@+id/appbarlayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppThemeLight.AppBarOverlay"
app:elevation="0dp"
android:translationZ="0.1dp">
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorBackground"
app:layout_scrollFlags="scroll|enterAlwaysCollapsed"
app:popupTheme="@style/AppThemeLight.PopupOverlay"
app:titleTextColor="?attr/colorAccent"
app:contentInsetStart="0dp">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/toolbarTxt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:animateLayoutChanges="true"
android:fontFamily="@font/manrope_bold"
android:layoutAnimation="@anim/layout_animation_fall_down"
android:text="@string/app_name"
android:textAlignment="center"
android:textColor="?attr/colorAccent"
android:textSize="20sp"
android:singleLine="true"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
<ProgressBar
android:id="@+id/progressBar"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="0dp"
android:layout_height="2dp"
android:progressTint="?attr/colorAccent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
android:animateLayoutChanges="true"
android:progressBackgroundTint="@android:color/transparent"/>
<com.google.android.material.chip.Chip
android:id="@+id/chip"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:visibility="gone"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.appcompat.widget.Toolbar>
</com.google.android.material.appbar.AppBarLayout>
<include layout="@layout/content_main" />
<LinearLayout
android:id="@+id/bottom_sheet_closer"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="gone"
android:orientation="vertical"
android:clickable="true"
android:focusable="true"/>
<com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/bottom_nav"
android:layout_width="match_parent"
android:layout_height="56dp"
android:layout_marginBottom="0dp"
app:elevation="0px"
app:itemIconTint="@color/bottom_nav_color_avhblue"
app:itemTextColor="@color/bottom_nav_color_avhblue"
app:layout_anchor="@+id/bottom_sheet"
android:layout_gravity="bottom"
app:menu="@menu/nav_items"/>
<View
android:id="@+id/bottom_nav_divider"
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_marginStart="8dp"
android:layout_marginEnd="8dp"
app:layout_anchor="@+id/bottom_sheet"
android:layout_gravity="top"/>
<!-- include bottom sheet -->
<include layout="@layout/bottom_sheet" />
<androidx.coordinatorlayout.widget.CoordinatorLayout
android:id="@+id/coordination"
android:layout_width="match_parent"
android:layout_height="80dp"
app:layout_anchor="@+id/bottom_sheet"
android:layout_gravity="top"
android:clickable="false"
android:focusable="false"/>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
+47
View File
@@ -0,0 +1,47 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/bottom_sheet"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@android:color/transparent"
android:orientation="vertical"
android:paddingTop="56dp"
app:behavior_hideable="false"
app:behavior_peekHeight="56dp"
app:layout_behavior="com.google.android.material.bottomsheet.BottomSheetBehavior">
<androidx.core.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:id="@+id/bottom_sheet_linear"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/bottom_sheet_header"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:gravity="top|start"
android:text="@string/information"
android:textSize="16sp"/>
<TextView
android:id="@+id/bottom_sheet_text"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="8dp"
android:gravity="top|start"
android:text="@string/noinfo"
android:textSize="12sp"/>
</LinearLayout>
</androidx.core.widget.NestedScrollView>
</LinearLayout>
+24
View File
@@ -0,0 +1,24 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
tools:showIn="@layout/app_bar_main"
android:id="@+id/content"
android:background="?attr/colorBackground"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<androidx.coordinatorlayout.widget.CoordinatorLayout
android:id="@+id/fragment_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginBottom="56dp"
android:background="?attr/colorBackground"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

Some files were not shown because too many files have changed in this diff Show More