diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..de251274 --- /dev/null +++ b/.gitignore @@ -0,0 +1,16 @@ +*.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 +.cxx +local.properties +.idea \ No newline at end of file diff --git a/README.md b/README.md index 3c0e0944..31f4c9ee 100644 Binary files a/README.md and b/README.md differ diff --git a/app/.gitignore b/app/.gitignore new file mode 100644 index 00000000..42afabfd --- /dev/null +++ b/app/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle new file mode 100644 index 00000000..d3eadfa6 --- /dev/null +++ b/app/build.gradle @@ -0,0 +1,56 @@ +plugins { + id 'com.android.application' + id 'org.jetbrains.kotlin.android' +} + +android { + namespace 'com.yoosef.oblivion' + compileSdk 34 + + defaultConfig { + applicationId "com.yoosef.oblivion" + minSdk 23 + targetSdk 34 + versionCode 1 + versionName "1.0" + + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" + vectorDrawables { + useSupportLibrary true + } + } + + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' + } + } + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } + kotlinOptions { + jvmTarget = '1.8' + } + buildFeatures { + compose true + } + composeOptions { + kotlinCompilerExtensionVersion '1.4.3' + } + packaging { + resources { + excludes += '/META-INF/{AL2.0,LGPL2.1}' + } + } +} + +dependencies { + implementation 'androidx.activity:activity-compose:1.8.2' + implementation 'androidx.appcompat:appcompat:1.6.1' + implementation 'com.google.android.material:material:1.11.0' + implementation 'androidx.constraintlayout:constraintlayout:2.1.4' + implementation 'com.hluhovskyi.camerabutton:camerabutton:2.0.1' + implementation 'com.airbnb.android:lottie:4.2.2' +} \ No newline at end of file diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro new file mode 100644 index 00000000..481bb434 --- /dev/null +++ b/app/proguard-rules.pro @@ -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 \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml new file mode 100644 index 00000000..30b07598 --- /dev/null +++ b/app/src/main/AndroidManifest.xml @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/org/bepass/oblivion/BugActivity.java b/app/src/main/java/org/bepass/oblivion/BugActivity.java new file mode 100644 index 00000000..60241283 --- /dev/null +++ b/app/src/main/java/org/bepass/oblivion/BugActivity.java @@ -0,0 +1,44 @@ + +package org.bepass.oblivion; + +import androidx.appcompat.app.AppCompatActivity; + +import android.os.Bundle; +import android.widget.ImageView; +import android.widget.TextView; + +import com.yoosef.oblivion.R; + +import java.util.Timer; +import java.util.TimerTask; + +public class BugActivity extends AppCompatActivity { + FileManager fileManager; + + ImageView back; + TextView logs; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_bug); + + fileManager = new FileManager(getApplicationContext()); + + back = findViewById(R.id.back); + logs = findViewById(R.id.logs); + + back.setOnClickListener(v -> onBackPressed()); + logs.setText(fileManager.getLog()); + + // Update Log Every 1 Second + new Timer().scheduleAtFixedRate(new TimerTask() { + @Override + public void run() { + logs.setText(fileManager.getLog()); + } + }, 0, 1000); + + } + +} \ No newline at end of file diff --git a/app/src/main/java/org/bepass/oblivion/EditSheet.java b/app/src/main/java/org/bepass/oblivion/EditSheet.java new file mode 100644 index 00000000..229b0a2e --- /dev/null +++ b/app/src/main/java/org/bepass/oblivion/EditSheet.java @@ -0,0 +1,76 @@ +package org.bepass.oblivion; + +import android.content.Context; +import android.widget.Button; +import android.widget.EditText; +import android.widget.TextView; + +import com.google.android.material.bottomsheet.BottomSheetDialog; +import com.yoosef.oblivion.R; + +public class EditSheet { + + FileManager fileManager; + + Context context; + BottomSheetDialog sheet; + + String title; + String sharedPrefKey; + + TextView titleView; + EditText value; + Button apply, cancel; + + SheetsCallBack sheetsCallBack; + + public EditSheet(Context context, String title, String sharedPrefKey, SheetsCallBack sheetsCallBack) { + this.context = context; + fileManager = new FileManager(context); + + this.title = "تغییر مقدار " + title; + this.sharedPrefKey = sharedPrefKey; + + this.sheetsCallBack = sheetsCallBack; + + init(); + } + + + private void init() { + // Initialize + sheet = new BottomSheetDialog(context); + sheet.setContentView(R.layout.edit_sheet); + + titleView = sheet.findViewById(R.id.title); + value = sheet.findViewById(R.id.edittext); + + apply = sheet.findViewById(R.id.applyButton); + cancel = sheet.findViewById(R.id.cancelButton); + } + + public boolean isElementsNull() { + return titleView == null || value == null || apply == null || cancel == null; + } + + public void start() { + if (isElementsNull()) { + return; + } + + titleView.setText(title); + value.setText(fileManager.getString("USERSETTING_" + sharedPrefKey)); + + cancel.setOnClickListener(v -> sheet.cancel()); + apply.setOnClickListener(v -> { + fileManager.set("USERSETTING_" + sharedPrefKey, value.getText().toString()); + sheet.cancel(); + }); + + sheet.show(); + value.requestFocus(); + sheet.setOnCancelListener(dialog -> sheetsCallBack.onSheetClosed()); + } + + +} diff --git a/app/src/main/java/org/bepass/oblivion/FileManager.java b/app/src/main/java/org/bepass/oblivion/FileManager.java new file mode 100644 index 00000000..5fa449a2 --- /dev/null +++ b/app/src/main/java/org/bepass/oblivion/FileManager.java @@ -0,0 +1,100 @@ +package org.bepass.oblivion; + +import android.content.Context; +import android.content.SharedPreferences; + +public class FileManager { + SharedPreferences sharedPreferences; + SharedPreferences sharedPreferencesAppender; + + public FileManager(Context context) { + sharedPreferences = context.getSharedPreferences("UserData", Context.MODE_PRIVATE); + sharedPreferencesAppender = context.getSharedPreferences("UserData", Context.MODE_PRIVATE); + } + + public void set(String name, String value) { + this.sharedPreferences. + edit() + .putString(name, value) + .apply(); + } + + public void set(String name, boolean value) { + this.sharedPreferences + .edit() + .putBoolean(name, value) + .apply(); + } + + public void set(String name, int value) { + this.sharedPreferences + .edit() + .putInt(name, value) + .apply(); + } + + public void set(String name, float value) { + this.sharedPreferences + .edit() + .putFloat(name, value) + .apply(); + } + + public void set(String name, double value) { + this.sharedPreferences + .edit() + .putLong(name, Double.doubleToRawLongBits(value)) + .apply(); + } + + public void set(String name, long value) { + this.sharedPreferences + .edit() + .putLong(name, value) + .apply(); + } + + public double getDouble(String name) { + return Double.longBitsToDouble(this.sharedPreferences.getLong(name, 0)); + } + + public long getLong(String name) { + return this.sharedPreferences.getLong(name, 0L); + } + + public String getString(String name) { + return this.sharedPreferences.getString(name, ""); + } + + public Integer getInt(String name) { + return this.sharedPreferences.getInt(name, 0); + } + + public Boolean getBoolean(String name) { + return this.sharedPreferences.getBoolean(name, false); + } + + public Float getFloat(String name) { + return this.sharedPreferences.getFloat(name, 0f); + } + + public void resetLog() { + this.sharedPreferences + .edit() + .putString("APP_LOG", "") + .apply(); + } + + public void addLog(String log) { + this.sharedPreferencesAppender + .edit() + .putString("APP_LOG", log) + .apply(); + } + + public String getLog() { + return getString("APP_LOG"); + } + + +} diff --git a/app/src/main/java/org/bepass/oblivion/InfoActivity.java b/app/src/main/java/org/bepass/oblivion/InfoActivity.java new file mode 100644 index 00000000..074c5fde --- /dev/null +++ b/app/src/main/java/org/bepass/oblivion/InfoActivity.java @@ -0,0 +1,44 @@ +package org.bepass.oblivion; + +import androidx.appcompat.app.AppCompatActivity; + +import android.content.Intent; +import android.net.Uri; +import android.os.Bundle; +import android.widget.ImageView; +import android.widget.RelativeLayout; + +import com.yoosef.oblivion.R; + +public class InfoActivity extends AppCompatActivity { + + ImageView back; + RelativeLayout github, twitter, ircf; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_info); + + init(); + + github.setOnClickListener(v -> openURL("https://github.com/bepass")); + twitter.setOnClickListener(v -> openURL("https://x.com/uo0sef")); + ircf.setOnClickListener(v -> openURL("https://ircf.space")); + + back.setOnClickListener(v -> onBackPressed()); + } + + private void init() { + back = findViewById(R.id.back); + github = findViewById(R.id.github_layout); + twitter = findViewById(R.id.twitter_layout); + ircf = findViewById(R.id.ircf_layout); + } + + protected void openURL(String url) { + Uri uri = Uri.parse(url); + Intent intent = new Intent(Intent.ACTION_VIEW, uri); + startActivity(intent); + } +} \ No newline at end of file diff --git a/app/src/main/java/org/bepass/oblivion/MainActivity.java b/app/src/main/java/org/bepass/oblivion/MainActivity.java new file mode 100644 index 00000000..08d6b872 --- /dev/null +++ b/app/src/main/java/org/bepass/oblivion/MainActivity.java @@ -0,0 +1,121 @@ +package org.bepass.oblivion; + +import android.content.Intent; +import android.graphics.Color; +import android.graphics.PorterDuff; +import android.graphics.PorterDuffColorFilter; +import android.os.Bundle; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.appcompat.app.AppCompatActivity; + +import com.airbnb.lottie.LottieAnimationView; +import com.airbnb.lottie.LottieProperty; +import com.airbnb.lottie.model.KeyPath; +import com.hluhovskyi.camerabutton.CameraButton; +import com.yoosef.oblivion.R; + +public class MainActivity extends AppCompatActivity { + + // 1 Wait For Connect + // 2 Connecting + // 3 Connected + int connectionState = 1; + + // Views + ImageView infoIcon, bugIcon, settingsIcon; + CameraButton switchButton; + LottieAnimationView switchAnimation; + TextView stateText; + + FileManager fileManager; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_main); + + init(); + firstValueInit(); + + switchButton.setOnStateChangeListener(state -> { + if (state == CameraButton.State.START_EXPANDING || state == CameraButton.State.START_COLLAPSING) { + if (connectionState == 1) { + // From NoAction to Connecting + stateText.setText("در حال اتصال"); + changeLottieAnimationColorFilterTo(0); + switchAnimation.playAnimation(); + connectionState = 2; + + + // TODO handle connecting Logic here and On Connected, Call connected() method + + } else if (connectionState == 2) { + // From Connecting to Disconnecting + stateText.setText("متصل نیستید"); + changeLottieAnimationColorFilterTo(Color.WHITE); + connectionState = 1; + + // TODO handle DisConnecting Logic here + + } else if (connectionState == 3) { + // From Connected to Disconnecting + stateText.setText("متصل نیستید"); + changeLottieAnimationColorFilterTo(Color.WHITE); + connectionState = 1; + + // TODO handle DisConnecting Logic here + } + } + }); + + + } + + private void connected() { + stateText.setText("اتصال برقرار شد"); + switchButton.cancel(); + connectionState = 3; + } + + private void firstValueInit() { + if (fileManager.getBoolean("isFirstValueInit")) return; + + fileManager.set("USERSETTING_endpoint", "127.0.0.1"); + fileManager.set("USERSETTING_port", "8086"); + + fileManager.set("USERSETTING_goal", false); + fileManager.set("USERSETTING_psiphon", false); + fileManager.set("USERSETTING_lan", false); + fileManager.set("isFirstValueInit", true); + } + + private void init() { + fileManager = new FileManager(getApplicationContext()); + + infoIcon = findViewById(R.id.info_icon); + bugIcon = findViewById(R.id.bug_icon); + settingsIcon = findViewById(R.id.setting_icon); + + switchButton = findViewById(R.id.switch_button); + switchAnimation = findViewById(R.id.animation); + stateText = findViewById(R.id.state_text); + + infoIcon.setOnClickListener(v -> startActivity(new Intent(MainActivity.this, InfoActivity.class))); + bugIcon.setOnClickListener(v -> startActivity(new Intent(MainActivity.this, BugActivity.class))); + settingsIcon.setOnClickListener(v -> startActivity(new Intent(MainActivity.this, SettingsActivity.class))); + } + + private void changeLottieAnimationColorFilterTo(int color) { + switchAnimation.setFrame(1); + switchAnimation.cancelAnimation(); + + switchAnimation.addValueCallback( + new KeyPath("**"), + LottieProperty.COLOR_FILTER, + frameInfo -> (color == 0) ? null : new PorterDuffColorFilter(color, PorterDuff.Mode.SRC_ATOP) + ); + } + +} \ No newline at end of file diff --git a/app/src/main/java/org/bepass/oblivion/SettingsActivity.java b/app/src/main/java/org/bepass/oblivion/SettingsActivity.java new file mode 100644 index 00000000..7a3bb1f5 --- /dev/null +++ b/app/src/main/java/org/bepass/oblivion/SettingsActivity.java @@ -0,0 +1,109 @@ +package org.bepass.oblivion; + +import androidx.appcompat.app.AppCompatActivity; + +import android.os.Bundle; +import android.widget.CheckBox; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.yoosef.oblivion.R; + +public class SettingsActivity extends AppCompatActivity { + + FileManager fileManager; + ImageView back; + + LinearLayout endpointLayout, portLayout, lanLayout, psiphonLayout, countryLayout, licenseLayout, goalLayout; + + TextView endpoint, port, country, license; + CheckBox psiphon, lan, goal; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_settings); + + init(); + + SheetsCallBack sheetsCallBack = this::settingBasicValuesFromSPF; + // Listen to Changes + endpointLayout.setOnClickListener(v -> (new EditSheet(this, "اندپوینت", "endpoint", sheetsCallBack)).start()); + portLayout.setOnClickListener(v -> (new EditSheet(this, "پورت", "port", sheetsCallBack)).start()); + countryLayout.setOnClickListener(v -> (new EditSheet(this, "کشور", "country", sheetsCallBack)).start()); + licenseLayout.setOnClickListener(v -> (new EditSheet(this, "لایسنس", "license", sheetsCallBack)).start()); + + goalLayout.setOnClickListener(v -> goal.setChecked(!goal.isChecked())); + lanLayout.setOnClickListener(v -> lan.setChecked(!lan.isChecked())); + psiphonLayout.setOnClickListener(v -> psiphon.setChecked(!psiphon.isChecked())); + + + psiphon.setOnCheckedChangeListener((buttonView, isChecked) -> { + fileManager.set("USERSETTING_psiphon", isChecked); + if (!isChecked) { + countryLayout.setAlpha(0.2f); + countryLayout.setClickable(false); + } else { + countryLayout.setAlpha(1f); + countryLayout.setClickable(true); + } + }); + + lan.setOnCheckedChangeListener((buttonView, isChecked) -> fileManager.set("USERSETTING_lan", isChecked)); + goal.setOnCheckedChangeListener((buttonView, isChecked) -> fileManager.set("USERSETTING_goal", isChecked)); + + // Set Current Values + settingBasicValuesFromSPF(); + } + + private void settingBasicValuesFromSPF() { + endpoint.setText(fileManager.getString("USERSETTING_endpoint")); + port.setText(fileManager.getString("USERSETTING_port")); + country.setText(fileManager.getString("USERSETTING_country")); + + String licenseKey = fileManager.getString("USERSETTING_license"); + if (licenseKey.length() > 8) + license.setText(licenseKey.substring(0, 8)); + else + license.setText(licenseKey); + + psiphon.setChecked(fileManager.getBoolean("USERSETTING_psiphon")); + lan.setChecked(fileManager.getBoolean("USERSETTING_lan")); + goal.setChecked(fileManager.getBoolean("USERSETTING_goal")); + + + if (!psiphon.isChecked()) { + countryLayout.setAlpha(0.2f); + countryLayout.setClickable(false); + } else { + countryLayout.setAlpha(1f); + countryLayout.setClickable(true); + } + } + + private void init() { + + fileManager = new FileManager(this); + + endpointLayout = findViewById(R.id.endpoint_layout); + portLayout = findViewById(R.id.port_layout); + lanLayout = findViewById(R.id.lan_layout); + psiphonLayout = findViewById(R.id.psiphon_layout); + countryLayout = findViewById(R.id.country_layout); + licenseLayout = findViewById(R.id.license_layout); + goalLayout = findViewById(R.id.goal_layout); + + back = findViewById(R.id.back); + endpoint = findViewById(R.id.endpoint); + port = findViewById(R.id.port); + country = findViewById(R.id.country); + license = findViewById(R.id.license); + + psiphon = findViewById(R.id.psiphon); + lan = findViewById(R.id.lan); + goal = findViewById(R.id.goal); + + back.setOnClickListener(v -> onBackPressed()); + } +} \ No newline at end of file diff --git a/app/src/main/java/org/bepass/oblivion/SheetsCallBack.java b/app/src/main/java/org/bepass/oblivion/SheetsCallBack.java new file mode 100644 index 00000000..bfb33237 --- /dev/null +++ b/app/src/main/java/org/bepass/oblivion/SheetsCallBack.java @@ -0,0 +1,6 @@ +package org.bepass.oblivion; + +public interface SheetsCallBack { + void onSheetClosed(); +} + diff --git a/app/src/main/res/drawable-anydpi/about_item.xml b/app/src/main/res/drawable-anydpi/about_item.xml new file mode 100644 index 00000000..093bde88 --- /dev/null +++ b/app/src/main/res/drawable-anydpi/about_item.xml @@ -0,0 +1,7 @@ + + + + + + diff --git a/app/src/main/res/drawable-anydpi/bottom_sheet_closer.xml b/app/src/main/res/drawable-anydpi/bottom_sheet_closer.xml new file mode 100644 index 00000000..ea4340db --- /dev/null +++ b/app/src/main/res/drawable-anydpi/bottom_sheet_closer.xml @@ -0,0 +1,7 @@ + + + + + + diff --git a/app/src/main/res/drawable-anydpi/edittext_back.xml b/app/src/main/res/drawable-anydpi/edittext_back.xml new file mode 100644 index 00000000..167af107 --- /dev/null +++ b/app/src/main/res/drawable-anydpi/edittext_back.xml @@ -0,0 +1,7 @@ + + + + + + diff --git a/app/src/main/res/drawable-anydpi/ic_back.xml b/app/src/main/res/drawable-anydpi/ic_back.xml new file mode 100644 index 00000000..e4e11807 --- /dev/null +++ b/app/src/main/res/drawable-anydpi/ic_back.xml @@ -0,0 +1,12 @@ + + + diff --git a/app/src/main/res/drawable-anydpi/ic_bug.xml b/app/src/main/res/drawable-anydpi/ic_bug.xml new file mode 100644 index 00000000..b45538d2 --- /dev/null +++ b/app/src/main/res/drawable-anydpi/ic_bug.xml @@ -0,0 +1,11 @@ + + + diff --git a/app/src/main/res/drawable-anydpi/ic_info.xml b/app/src/main/res/drawable-anydpi/ic_info.xml new file mode 100644 index 00000000..58389a33 --- /dev/null +++ b/app/src/main/res/drawable-anydpi/ic_info.xml @@ -0,0 +1,11 @@ + + + diff --git a/app/src/main/res/drawable-anydpi/ic_power.xml b/app/src/main/res/drawable-anydpi/ic_power.xml new file mode 100644 index 00000000..9847dd37 --- /dev/null +++ b/app/src/main/res/drawable-anydpi/ic_power.xml @@ -0,0 +1,11 @@ + + + diff --git a/app/src/main/res/drawable-anydpi/ic_settings.xml b/app/src/main/res/drawable-anydpi/ic_settings.xml new file mode 100644 index 00000000..d1763c9a --- /dev/null +++ b/app/src/main/res/drawable-anydpi/ic_settings.xml @@ -0,0 +1,11 @@ + + + diff --git a/app/src/main/res/drawable-hdpi/ic_back.png b/app/src/main/res/drawable-hdpi/ic_back.png new file mode 100644 index 00000000..93751d0f Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_back.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_bug.png b/app/src/main/res/drawable-hdpi/ic_bug.png new file mode 100644 index 00000000..51cf53b4 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_bug.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_github.png b/app/src/main/res/drawable-hdpi/ic_github.png new file mode 100644 index 00000000..ab4c3c31 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_github.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_info.png b/app/src/main/res/drawable-hdpi/ic_info.png new file mode 100644 index 00000000..4cf2e213 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_info.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_ircf.png b/app/src/main/res/drawable-hdpi/ic_ircf.png new file mode 100644 index 00000000..6fe6dadc Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_ircf.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_power.png b/app/src/main/res/drawable-hdpi/ic_power.png new file mode 100644 index 00000000..60170162 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_power.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_settings.png b/app/src/main/res/drawable-hdpi/ic_settings.png new file mode 100644 index 00000000..813a19d8 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_settings.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_twitter.png b/app/src/main/res/drawable-hdpi/ic_twitter.png new file mode 100644 index 00000000..568e1732 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_twitter.png differ diff --git a/app/src/main/res/drawable-hdpi/rounded_bottom_sheet.xml b/app/src/main/res/drawable-hdpi/rounded_bottom_sheet.xml new file mode 100644 index 00000000..84eec740 --- /dev/null +++ b/app/src/main/res/drawable-hdpi/rounded_bottom_sheet.xml @@ -0,0 +1,8 @@ + + + + + diff --git a/app/src/main/res/drawable-mdpi/ic_back.png b/app/src/main/res/drawable-mdpi/ic_back.png new file mode 100644 index 00000000..9ae407f1 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_back.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_bug.png b/app/src/main/res/drawable-mdpi/ic_bug.png new file mode 100644 index 00000000..ae25ea27 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_bug.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_github.png b/app/src/main/res/drawable-mdpi/ic_github.png new file mode 100644 index 00000000..3ae2944e Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_github.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_info.png b/app/src/main/res/drawable-mdpi/ic_info.png new file mode 100644 index 00000000..4db62d4f Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_info.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_ircf.png b/app/src/main/res/drawable-mdpi/ic_ircf.png new file mode 100644 index 00000000..3e16ab23 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_ircf.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_power.png b/app/src/main/res/drawable-mdpi/ic_power.png new file mode 100644 index 00000000..16489fd8 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_power.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_settings.png b/app/src/main/res/drawable-mdpi/ic_settings.png new file mode 100644 index 00000000..7cccfe5b Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_settings.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_twitter.png b/app/src/main/res/drawable-mdpi/ic_twitter.png new file mode 100644 index 00000000..3ca2b90a Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_twitter.png differ diff --git a/app/src/main/res/drawable-v24/ic_launcher_foreground.xml b/app/src/main/res/drawable-v24/ic_launcher_foreground.xml new file mode 100644 index 00000000..05c351ca --- /dev/null +++ b/app/src/main/res/drawable-v24/ic_launcher_foreground.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable-xhdpi/ic_back.png b/app/src/main/res/drawable-xhdpi/ic_back.png new file mode 100644 index 00000000..c87a620a Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_back.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_bug.png b/app/src/main/res/drawable-xhdpi/ic_bug.png new file mode 100644 index 00000000..7d5c9658 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_bug.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_github.png b/app/src/main/res/drawable-xhdpi/ic_github.png new file mode 100644 index 00000000..25bf114d Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_github.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_info.png b/app/src/main/res/drawable-xhdpi/ic_info.png new file mode 100644 index 00000000..7757131e Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_info.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_ircf.png b/app/src/main/res/drawable-xhdpi/ic_ircf.png new file mode 100644 index 00000000..6485687f Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_ircf.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_power.png b/app/src/main/res/drawable-xhdpi/ic_power.png new file mode 100644 index 00000000..d50f2031 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_power.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_settings.png b/app/src/main/res/drawable-xhdpi/ic_settings.png new file mode 100644 index 00000000..b44e437d Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_settings.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_twitter.png b/app/src/main/res/drawable-xhdpi/ic_twitter.png new file mode 100644 index 00000000..2fee07a9 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_twitter.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_back.png b/app/src/main/res/drawable-xxhdpi/ic_back.png new file mode 100644 index 00000000..2ad23008 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_back.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_bug.png b/app/src/main/res/drawable-xxhdpi/ic_bug.png new file mode 100644 index 00000000..0568c34e Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_bug.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_github.png b/app/src/main/res/drawable-xxhdpi/ic_github.png new file mode 100644 index 00000000..b8abdc41 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_github.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_info.png b/app/src/main/res/drawable-xxhdpi/ic_info.png new file mode 100644 index 00000000..1d738ca6 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_info.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_ircf.png b/app/src/main/res/drawable-xxhdpi/ic_ircf.png new file mode 100644 index 00000000..fb915113 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_ircf.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_power.png b/app/src/main/res/drawable-xxhdpi/ic_power.png new file mode 100644 index 00000000..66d2cd5e Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_power.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_settings.png b/app/src/main/res/drawable-xxhdpi/ic_settings.png new file mode 100644 index 00000000..68720511 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_settings.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_twitter.png b/app/src/main/res/drawable-xxhdpi/ic_twitter.png new file mode 100644 index 00000000..86630782 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_twitter.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/ic_github.png b/app/src/main/res/drawable-xxxhdpi/ic_github.png new file mode 100644 index 00000000..c5eb2af7 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_github.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/ic_ircf.png b/app/src/main/res/drawable-xxxhdpi/ic_ircf.png new file mode 100644 index 00000000..45bdd089 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_ircf.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/ic_twitter.png b/app/src/main/res/drawable-xxxhdpi/ic_twitter.png new file mode 100644 index 00000000..7a37f1c7 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_twitter.png differ diff --git a/app/src/main/res/drawable/background_gradient.xml b/app/src/main/res/drawable/background_gradient.xml new file mode 100644 index 00000000..2260e7f5 --- /dev/null +++ b/app/src/main/res/drawable/background_gradient.xml @@ -0,0 +1,9 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_launcher_background.xml b/app/src/main/res/drawable/ic_launcher_background.xml new file mode 100644 index 00000000..2d80bfa7 --- /dev/null +++ b/app/src/main/res/drawable/ic_launcher_background.xml @@ -0,0 +1,170 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/font/oxygenbold.ttf b/app/src/main/res/font/oxygenbold.ttf new file mode 100644 index 00000000..feca433b Binary files /dev/null and b/app/src/main/res/font/oxygenbold.ttf differ diff --git a/app/src/main/res/font/oxygenlight.ttf b/app/src/main/res/font/oxygenlight.ttf new file mode 100644 index 00000000..13524b5f Binary files /dev/null and b/app/src/main/res/font/oxygenlight.ttf differ diff --git a/app/src/main/res/font/oxygenregular.ttf b/app/src/main/res/font/oxygenregular.ttf new file mode 100644 index 00000000..d03f43af Binary files /dev/null and b/app/src/main/res/font/oxygenregular.ttf differ diff --git a/app/src/main/res/font/shabnam.ttf b/app/src/main/res/font/shabnam.ttf new file mode 100644 index 00000000..dd9de4fb Binary files /dev/null and b/app/src/main/res/font/shabnam.ttf differ diff --git a/app/src/main/res/font/shabnambold.ttf b/app/src/main/res/font/shabnambold.ttf new file mode 100644 index 00000000..181b2f20 Binary files /dev/null and b/app/src/main/res/font/shabnambold.ttf differ diff --git a/app/src/main/res/font/shabnamlight.ttf b/app/src/main/res/font/shabnamlight.ttf new file mode 100644 index 00000000..7433cded Binary files /dev/null and b/app/src/main/res/font/shabnamlight.ttf differ diff --git a/app/src/main/res/font/shabnammedium.ttf b/app/src/main/res/font/shabnammedium.ttf new file mode 100644 index 00000000..7529c3b1 Binary files /dev/null and b/app/src/main/res/font/shabnammedium.ttf differ diff --git a/app/src/main/res/font/shabnamthin.ttf b/app/src/main/res/font/shabnamthin.ttf new file mode 100644 index 00000000..cf318f62 Binary files /dev/null and b/app/src/main/res/font/shabnamthin.ttf differ diff --git a/app/src/main/res/layout/activity_bug.xml b/app/src/main/res/layout/activity_bug.xml new file mode 100644 index 00000000..ba26aaf4 --- /dev/null +++ b/app/src/main/res/layout/activity_bug.xml @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_info.xml b/app/src/main/res/layout/activity_info.xml new file mode 100644 index 00000000..9919234f --- /dev/null +++ b/app/src/main/res/layout/activity_info.xml @@ -0,0 +1,186 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml new file mode 100644 index 00000000..17f9ae17 --- /dev/null +++ b/app/src/main/res/layout/activity_main.xml @@ -0,0 +1,145 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_settings.xml b/app/src/main/res/layout/activity_settings.xml new file mode 100644 index 00000000..20a625b5 --- /dev/null +++ b/app/src/main/res/layout/activity_settings.xml @@ -0,0 +1,377 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/edit_sheet.xml b/app/src/main/res/layout/edit_sheet.xml new file mode 100644 index 00000000..ef917aca --- /dev/null +++ b/app/src/main/res/layout/edit_sheet.xml @@ -0,0 +1,74 @@ + + + + + + + + + + + +