commit 3a566a08fa787c8c7d2f013ab592ef32c8067788 Author: ithillad Date: Thu Dec 19 14:09:30 2024 +0100 Initial commit: Add webtoon viewer diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..aa724b7 --- /dev/null +++ b/.gitignore @@ -0,0 +1,15 @@ +*.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 diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..b589d56 --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/deploymentTargetSelector.xml b/.idea/deploymentTargetSelector.xml new file mode 100644 index 0000000..b272e7e --- /dev/null +++ b/.idea/deploymentTargetSelector.xml @@ -0,0 +1,18 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml new file mode 100644 index 0000000..0897082 --- /dev/null +++ b/.idea/gradle.xml @@ -0,0 +1,19 @@ + + + + + + + \ No newline at end of file diff --git a/.idea/kotlinc.xml b/.idea/kotlinc.xml new file mode 100644 index 0000000..fdf8d99 --- /dev/null +++ b/.idea/kotlinc.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/.idea/migrations.xml b/.idea/migrations.xml new file mode 100644 index 0000000..f8051a6 --- /dev/null +++ b/.idea/migrations.xml @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..8978d23 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,9 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/other.xml b/.idea/other.xml new file mode 100644 index 0000000..104e542 --- /dev/null +++ b/.idea/other.xml @@ -0,0 +1,329 @@ + + + + + + \ No newline at end of file diff --git a/app/.gitignore b/app/.gitignore new file mode 100644 index 0000000..42afabf --- /dev/null +++ b/app/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/app/build.gradle.kts b/app/build.gradle.kts new file mode 100644 index 0000000..1a63603 --- /dev/null +++ b/app/build.gradle.kts @@ -0,0 +1,58 @@ +plugins { + alias(libs.plugins.android.application) + alias(libs.plugins.jetbrains.kotlin.android) + kotlin("kapt") +} + +android { + namespace = "com.webtoonviewer" + compileSdk = 34 + + defaultConfig { + applicationId = "com.webtoonviewer" + minSdk = 31 + targetSdk = 34 + versionCode = 1 + versionName = "1.0" + + testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" + } + + buildTypes { + release { + isMinifyEnabled = 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" + } +} + +dependencies { + + implementation(libs.androidx.core.ktx) + implementation(libs.androidx.appcompat) + implementation(libs.material) + implementation(libs.androidx.activity) + implementation(libs.androidx.constraintlayout) + testImplementation(libs.junit) + androidTestImplementation(libs.androidx.junit) + androidTestImplementation(libs.androidx.espresso.core) + implementation(libs.smbj) + implementation(libs.kotlinx.coroutines.android) + implementation (libs.gson) + implementation (libs.androidx.room.runtime) + kapt ("androidx.room:room-compiler:2.6.1") + implementation ("androidx.room:room-ktx:2.6.1") + implementation ("androidx.work:work-runtime-ktx:2.9.0") + implementation (libs.github.glide) + annotationProcessor (libs.compiler) +} \ No newline at end of file diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro new file mode 100644 index 0000000..481bb43 --- /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/androidTest/java/com/webtoonviewer/ExampleInstrumentedTest.kt b/app/src/androidTest/java/com/webtoonviewer/ExampleInstrumentedTest.kt new file mode 100644 index 0000000..c0f8731 --- /dev/null +++ b/app/src/androidTest/java/com/webtoonviewer/ExampleInstrumentedTest.kt @@ -0,0 +1,24 @@ +package com.webtoonviewer + +import androidx.test.platform.app.InstrumentationRegistry +import androidx.test.ext.junit.runners.AndroidJUnit4 + +import org.junit.Test +import org.junit.runner.RunWith + +import org.junit.Assert.* + +/** + * Instrumented test, which will execute on an Android device. + * + * See [testing documentation](http://d.android.com/tools/testing). + */ +@RunWith(AndroidJUnit4::class) +class ExampleInstrumentedTest { + @Test + fun useAppContext() { + // Context of the app under test. + val appContext = InstrumentationRegistry.getInstrumentation().targetContext + assertEquals("com.webtoonviewer", appContext.packageName) + } +} \ 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 0000000..e0430be --- /dev/null +++ b/app/src/main/AndroidManifest.xml @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/assets/115.jpg b/app/src/main/assets/115.jpg new file mode 100644 index 0000000..e349462 Binary files /dev/null and b/app/src/main/assets/115.jpg differ diff --git a/app/src/main/assets/116.jpg b/app/src/main/assets/116.jpg new file mode 100644 index 0000000..1c82c21 Binary files /dev/null and b/app/src/main/assets/116.jpg differ diff --git a/app/src/main/assets/142.jpg b/app/src/main/assets/142.jpg new file mode 100644 index 0000000..f4b80dc Binary files /dev/null and b/app/src/main/assets/142.jpg differ diff --git a/app/src/main/assets/152.jpg b/app/src/main/assets/152.jpg new file mode 100644 index 0000000..42e21f9 Binary files /dev/null and b/app/src/main/assets/152.jpg differ diff --git a/app/src/main/assets/167.jpg b/app/src/main/assets/167.jpg new file mode 100644 index 0000000..6d83212 Binary files /dev/null and b/app/src/main/assets/167.jpg differ diff --git a/app/src/main/assets/200.jpg b/app/src/main/assets/200.jpg new file mode 100644 index 0000000..a9b43dd Binary files /dev/null and b/app/src/main/assets/200.jpg differ diff --git a/app/src/main/assets/222.jpg b/app/src/main/assets/222.jpg new file mode 100644 index 0000000..47bb264 Binary files /dev/null and b/app/src/main/assets/222.jpg differ diff --git a/app/src/main/assets/230.jpg b/app/src/main/assets/230.jpg new file mode 100644 index 0000000..f640396 Binary files /dev/null and b/app/src/main/assets/230.jpg differ diff --git a/app/src/main/assets/231.jpg b/app/src/main/assets/231.jpg new file mode 100644 index 0000000..c4be87a Binary files /dev/null and b/app/src/main/assets/231.jpg differ diff --git a/app/src/main/assets/233.jpg b/app/src/main/assets/233.jpg new file mode 100644 index 0000000..bf08a30 Binary files /dev/null and b/app/src/main/assets/233.jpg differ diff --git a/app/src/main/assets/247.jpg b/app/src/main/assets/247.jpg new file mode 100644 index 0000000..41a1027 Binary files /dev/null and b/app/src/main/assets/247.jpg differ diff --git a/app/src/main/assets/255.jpg b/app/src/main/assets/255.jpg new file mode 100644 index 0000000..abf9922 Binary files /dev/null and b/app/src/main/assets/255.jpg differ diff --git a/app/src/main/assets/303.jpg b/app/src/main/assets/303.jpg new file mode 100644 index 0000000..a55749d Binary files /dev/null and b/app/src/main/assets/303.jpg differ diff --git a/app/src/main/assets/322.jpg b/app/src/main/assets/322.jpg new file mode 100644 index 0000000..fe61b24 Binary files /dev/null and b/app/src/main/assets/322.jpg differ diff --git a/app/src/main/assets/330.jpg b/app/src/main/assets/330.jpg new file mode 100644 index 0000000..d869212 Binary files /dev/null and b/app/src/main/assets/330.jpg differ diff --git a/app/src/main/assets/368.jpg b/app/src/main/assets/368.jpg new file mode 100644 index 0000000..d1e4d63 Binary files /dev/null and b/app/src/main/assets/368.jpg differ diff --git a/app/src/main/assets/399.jpg b/app/src/main/assets/399.jpg new file mode 100644 index 0000000..7e14ad6 Binary files /dev/null and b/app/src/main/assets/399.jpg differ diff --git a/app/src/main/assets/41.jpg b/app/src/main/assets/41.jpg new file mode 100644 index 0000000..02f055d Binary files /dev/null and b/app/src/main/assets/41.jpg differ diff --git a/app/src/main/assets/421.jpg b/app/src/main/assets/421.jpg new file mode 100644 index 0000000..b88ff73 Binary files /dev/null and b/app/src/main/assets/421.jpg differ diff --git a/app/src/main/assets/424.jpg b/app/src/main/assets/424.jpg new file mode 100644 index 0000000..4760864 Binary files /dev/null and b/app/src/main/assets/424.jpg differ diff --git a/app/src/main/assets/429.jpg b/app/src/main/assets/429.jpg new file mode 100644 index 0000000..2718d44 Binary files /dev/null and b/app/src/main/assets/429.jpg differ diff --git a/app/src/main/assets/433.jpg b/app/src/main/assets/433.jpg new file mode 100644 index 0000000..43b36cf Binary files /dev/null and b/app/src/main/assets/433.jpg differ diff --git a/app/src/main/assets/450.jpg b/app/src/main/assets/450.jpg new file mode 100644 index 0000000..173ed6c Binary files /dev/null and b/app/src/main/assets/450.jpg differ diff --git a/app/src/main/assets/484.jpg b/app/src/main/assets/484.jpg new file mode 100644 index 0000000..1bb10b6 Binary files /dev/null and b/app/src/main/assets/484.jpg differ diff --git a/app/src/main/assets/489.jpg b/app/src/main/assets/489.jpg new file mode 100644 index 0000000..d737f02 Binary files /dev/null and b/app/src/main/assets/489.jpg differ diff --git a/app/src/main/assets/49.jpg b/app/src/main/assets/49.jpg new file mode 100644 index 0000000..d094a89 Binary files /dev/null and b/app/src/main/assets/49.jpg differ diff --git a/app/src/main/assets/516.jpg b/app/src/main/assets/516.jpg new file mode 100644 index 0000000..7458a1e Binary files /dev/null and b/app/src/main/assets/516.jpg differ diff --git a/app/src/main/assets/53.jpg b/app/src/main/assets/53.jpg new file mode 100644 index 0000000..d36d7c2 Binary files /dev/null and b/app/src/main/assets/53.jpg differ diff --git a/app/src/main/assets/545.jpg b/app/src/main/assets/545.jpg new file mode 100644 index 0000000..3007ce9 Binary files /dev/null and b/app/src/main/assets/545.jpg differ diff --git a/app/src/main/assets/547.jpg b/app/src/main/assets/547.jpg new file mode 100644 index 0000000..aa71c0c Binary files /dev/null and b/app/src/main/assets/547.jpg differ diff --git a/app/src/main/assets/587.jpg b/app/src/main/assets/587.jpg new file mode 100644 index 0000000..9c7d27f Binary files /dev/null and b/app/src/main/assets/587.jpg differ diff --git a/app/src/main/assets/591.jpg b/app/src/main/assets/591.jpg new file mode 100644 index 0000000..bc2352f Binary files /dev/null and b/app/src/main/assets/591.jpg differ diff --git a/app/src/main/assets/595.jpg b/app/src/main/assets/595.jpg new file mode 100644 index 0000000..fe61b24 Binary files /dev/null and b/app/src/main/assets/595.jpg differ diff --git a/app/src/main/assets/617.jpg b/app/src/main/assets/617.jpg new file mode 100644 index 0000000..698a4ad Binary files /dev/null and b/app/src/main/assets/617.jpg differ diff --git a/app/src/main/assets/711.jpg b/app/src/main/assets/711.jpg new file mode 100644 index 0000000..ba4ec35 Binary files /dev/null and b/app/src/main/assets/711.jpg differ diff --git a/app/src/main/assets/736.jpg b/app/src/main/assets/736.jpg new file mode 100644 index 0000000..37d44ac Binary files /dev/null and b/app/src/main/assets/736.jpg differ diff --git a/app/src/main/assets/784.jpg b/app/src/main/assets/784.jpg new file mode 100644 index 0000000..d6f75e2 Binary files /dev/null and b/app/src/main/assets/784.jpg differ diff --git a/app/src/main/assets/787.jpg b/app/src/main/assets/787.jpg new file mode 100644 index 0000000..f8b0363 Binary files /dev/null and b/app/src/main/assets/787.jpg differ diff --git a/app/src/main/assets/810.jpg b/app/src/main/assets/810.jpg new file mode 100644 index 0000000..4d3d7bd Binary files /dev/null and b/app/src/main/assets/810.jpg differ diff --git a/app/src/main/assets/814.jpg b/app/src/main/assets/814.jpg new file mode 100644 index 0000000..e6ef5ce Binary files /dev/null and b/app/src/main/assets/814.jpg differ diff --git a/app/src/main/assets/862.jpg b/app/src/main/assets/862.jpg new file mode 100644 index 0000000..3da1a61 Binary files /dev/null and b/app/src/main/assets/862.jpg differ diff --git a/app/src/main/assets/academys-undercover-professor.png b/app/src/main/assets/academys-undercover-professor.png new file mode 100644 index 0000000..d889164 Binary files /dev/null and b/app/src/main/assets/academys-undercover-professor.png differ diff --git a/app/src/main/assets/childhood-friend-complex.png b/app/src/main/assets/childhood-friend-complex.png new file mode 100644 index 0000000..cea6bc9 Binary files /dev/null and b/app/src/main/assets/childhood-friend-complex.png differ diff --git a/app/src/main/assets/couple-breaker.png b/app/src/main/assets/couple-breaker.png new file mode 100644 index 0000000..9348f05 Binary files /dev/null and b/app/src/main/assets/couple-breaker.png differ diff --git a/app/src/main/assets/duzhe.png b/app/src/main/assets/duzhe.png new file mode 100644 index 0000000..2732a37 Binary files /dev/null and b/app/src/main/assets/duzhe.png differ diff --git a/app/src/main/assets/estatedeveloper.png b/app/src/main/assets/estatedeveloper.png new file mode 100644 index 0000000..be1ee5a Binary files /dev/null and b/app/src/main/assets/estatedeveloper.png differ diff --git a/app/src/main/assets/just-twilight.png b/app/src/main/assets/just-twilight.png new file mode 100644 index 0000000..da5d5c9 Binary files /dev/null and b/app/src/main/assets/just-twilight.png differ diff --git a/app/src/main/assets/like-mother-like-daughter.png b/app/src/main/assets/like-mother-like-daughter.png new file mode 100644 index 0000000..94c4da2 Binary files /dev/null and b/app/src/main/assets/like-mother-like-daughter.png differ diff --git a/app/src/main/assets/mad-demon.png b/app/src/main/assets/mad-demon.png new file mode 100644 index 0000000..7b82a5f Binary files /dev/null and b/app/src/main/assets/mad-demon.png differ diff --git a/app/src/main/assets/myst-might-mayhem.jpg b/app/src/main/assets/myst-might-mayhem.jpg new file mode 100644 index 0000000..2444c23 Binary files /dev/null and b/app/src/main/assets/myst-might-mayhem.jpg differ diff --git a/app/src/main/assets/night-of-shadows.png b/app/src/main/assets/night-of-shadows.png new file mode 100644 index 0000000..e2ba24e Binary files /dev/null and b/app/src/main/assets/night-of-shadows.png differ diff --git a/app/src/main/assets/only-hope.png b/app/src/main/assets/only-hope.png new file mode 100644 index 0000000..cd70da3 Binary files /dev/null and b/app/src/main/assets/only-hope.png differ diff --git a/app/src/main/assets/surviving-the-game-as-a-barbarian.png b/app/src/main/assets/surviving-the-game-as-a-barbarian.png new file mode 100644 index 0000000..494e951 Binary files /dev/null and b/app/src/main/assets/surviving-the-game-as-a-barbarian.png differ diff --git a/app/src/main/assets/the-spark-in-your-eyes.jpg b/app/src/main/assets/the-spark-in-your-eyes.jpg new file mode 100644 index 0000000..2a3294c Binary files /dev/null and b/app/src/main/assets/the-spark-in-your-eyes.jpg differ diff --git a/app/src/main/assets/trap.png b/app/src/main/assets/trap.png new file mode 100644 index 0000000..d36e05a Binary files /dev/null and b/app/src/main/assets/trap.png differ diff --git a/app/src/main/assets/youth-of-revelation.png b/app/src/main/assets/youth-of-revelation.png new file mode 100644 index 0000000..19ee601 Binary files /dev/null and b/app/src/main/assets/youth-of-revelation.png differ diff --git a/app/src/main/ic_launcher-playstore.png b/app/src/main/ic_launcher-playstore.png new file mode 100644 index 0000000..641f910 Binary files /dev/null and b/app/src/main/ic_launcher-playstore.png differ diff --git a/app/src/main/java/com/webtoonviewer/App.kt b/app/src/main/java/com/webtoonviewer/App.kt new file mode 100644 index 0000000..8145c6e --- /dev/null +++ b/app/src/main/java/com/webtoonviewer/App.kt @@ -0,0 +1,21 @@ +package com.webtoonviewer + +import android.app.Application +import androidx.work.OneTimeWorkRequest +import androidx.work.WorkManager +import com.webtoonviewer.work.UpdateBooks + +class App : Application() { + + override fun onCreate() { + super.onCreate() + + val update = true + + + if (update) { + val workRequest = OneTimeWorkRequest.Builder(UpdateBooks::class.java).build() + WorkManager.getInstance(this).enqueue(workRequest) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/webtoonviewer/db/AppDatabase.kt b/app/src/main/java/com/webtoonviewer/db/AppDatabase.kt new file mode 100644 index 0000000..612642f --- /dev/null +++ b/app/src/main/java/com/webtoonviewer/db/AppDatabase.kt @@ -0,0 +1,65 @@ +package com.webtoonviewer.db + +import android.content.Context +import androidx.room.Database +import androidx.room.Room +import androidx.room.RoomDatabase +import androidx.room.TypeConverters +import androidx.room.migration.Migration +import androidx.sqlite.db.SupportSQLiteDatabase + +@Database(entities = [Book::class], version = 8) +@TypeConverters(Converters::class) +abstract class AppDatabase : RoomDatabase() { + abstract fun bookDao(): BookDao + + companion object { + @Volatile + private var INSTANCE: AppDatabase? = null + + fun getDatabase(context: Context): AppDatabase { + return INSTANCE ?: synchronized(this) { + val instance = Room.databaseBuilder( + context.applicationContext, + AppDatabase::class.java, + "app_database" + ).addMigrations(MIGRATION_1_2).build() + INSTANCE = instance + instance + } + } + + private val MIGRATION_1_2 = object : Migration(7, 8) { + override fun migrate(database: SupportSQLiteDatabase) { +// // 1. 创建临时表 + database.execSQL( + "CREATE TABLE books_temp (id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, " + + "title TEXT NOT NULL, " + + "author TEXT NOT NULL, " + + "description TEXT NOT NULL, " + + "tag TEXT NOT NULL, " + + "img TEXT NOT NULL, " + + "chapters TEXT NOT NULL, " + + "chapterSum INTEGER NOT NULL, " + + "bookmarkChapter TEXT NOT NULL, " + + "bookmarkPosition INTEGER NOT NULL, " + + "bookmarkTopOffset INTEGER NOT NULL, " + + "isLocal INTEGER NOT NULL )" + ) + + // 2. 从旧表复制数据到新表 + database.execSQL(""" + INSERT INTO books_temp (id, title, author, description, tag, img, chapters, chapterSum, bookmarkChapter, bookmarkPosition, bookmarkTopOffset, isLocal) + SELECT id, title, author, description, tag, img, chapters, chapterSum, bookmarkChapter, bookmarkPosition, bookmarkTopOffset, '0' FROM books + """) + + // 3. 删除旧表 + database.execSQL("DROP TABLE books") + + // 4. 将新表重命名为旧表 + database.execSQL("ALTER TABLE books_temp RENAME TO books") + } + + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/webtoonviewer/db/Book.kt b/app/src/main/java/com/webtoonviewer/db/Book.kt new file mode 100644 index 0000000..fc5af05 --- /dev/null +++ b/app/src/main/java/com/webtoonviewer/db/Book.kt @@ -0,0 +1,53 @@ +package com.webtoonviewer.db + +import androidx.room.ColumnInfo +import androidx.room.Entity +import androidx.room.PrimaryKey +import androidx.room.TypeConverter +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken + +@Entity(tableName = "books") +data class Book( + @PrimaryKey(autoGenerate = true) val id: Int = 0, + @ColumnInfo(name = "title") val title: String, + @ColumnInfo(name = "author") val author: String, + @ColumnInfo(name = "description") val description: String, + @ColumnInfo(name = "tag") val tag: String, + @ColumnInfo(name = "img") val img: String, + @ColumnInfo(name = "chapters") val chapters: MutableList, + @ColumnInfo(name = "chapterSum") val chapterSum: Int, + @ColumnInfo(name = "bookmarkChapter") var bookmarkChapter: String, + @ColumnInfo(name = "bookmarkPosition") var bookmarkPosition: Int, + @ColumnInfo(name = "bookmarkTopOffset") var bookmarkTopOffset: Int, + @ColumnInfo(name = "isLocal") var isLocal: Int, + ) { + constructor(id: Int, title: String, author: String, description: String, tag: String, img: String, isLocal: Int) : this( + id = id, + title = title, + author = author, + description = description, + tag = tag, + img = img, + chapters = mutableListOf(), + chapterSum = 0, + bookmarkChapter = "", + bookmarkPosition = 0, + bookmarkTopOffset = 0, + isLocal = isLocal + ) +} + + +class Converters { + @TypeConverter + fun fromString(value: String): MutableList { + val listType = object : TypeToken>() {}.type + return Gson().fromJson(value, listType) + } + + @TypeConverter + fun fromList(list: MutableList): String { + return Gson().toJson(list) + } +} diff --git a/app/src/main/java/com/webtoonviewer/db/BookDao.kt b/app/src/main/java/com/webtoonviewer/db/BookDao.kt new file mode 100644 index 0000000..285bc39 --- /dev/null +++ b/app/src/main/java/com/webtoonviewer/db/BookDao.kt @@ -0,0 +1,56 @@ +package com.webtoonviewer.db + +import androidx.room.Dao +import androidx.room.Insert +import androidx.room.OnConflictStrategy +import androidx.room.Query + +@Dao +interface BookDao { + + @Query("SELECT * FROM books") + suspend fun getAllBooks(): List + + @Query("SELECT title FROM books") + suspend fun getAllTitles(): List + + @Query("SELECT * FROM books WHERE title = :title") + suspend fun getBookByTitle(title: String): Book? + + @Query("SELECT * FROM books WHERE id = :bookId") + suspend fun getBookById(bookId: Int): Book? + + @Query("UPDATE books SET title = :title WHERE id = :bookId") + suspend fun updateTitleById(bookId: Int, title: String) + + @Query("UPDATE books SET author = :author, tag = :tag, description = :description, img = :img WHERE id = :bookId") + suspend fun updateInformationById(bookId: Int, author: String, tag: String, description: String, img: String) + + @Query("UPDATE books SET tag = :tag WHERE id = :bookId") + suspend fun updateTagById(bookId: Int, tag: String) + + @Query("UPDATE books SET description = :description WHERE id = :bookId") + suspend fun updateDescriptionById(bookId: Int, description: String) + + @Query("UPDATE books SET chapters = :chapters, chapterSum = :chapterSum WHERE id = :bookId") + suspend fun updateChaptersById(bookId: Int, chapters: List, chapterSum: Int) + + @Query("UPDATE books SET bookmarkChapter = :bookmarkChapter, bookmarkPosition = :bookmarkPosition, bookmarkTopOffset = :bookmarkTopOffset WHERE id = :bookId") + suspend fun updateBookmarkById(bookId: Int, bookmarkChapter: String, bookmarkPosition: Int, bookmarkTopOffset: Int) + + @Query("UPDATE books SET isLocal = :isLocal WHERE id = :bookId") + suspend fun updateIsLocalById(bookId: Int, isLocal: Int) + + @Query("DELETE FROM books WHERE id = :bookId") + suspend fun deleteBookById(bookId: Int) + // 添加新书籍 + @Insert + suspend fun addBook(book: Book) + + @Query("UPDATE sqlite_sequence SET seq = :startId WHERE name = 'books'") + suspend fun setAutoIncrement(startId: Int) + +// +// @Query("SELECT * FROM sqlite_sequence WHERE name = 'books'") +// suspend fun getAutoIncrement() +} \ No newline at end of file diff --git a/app/src/main/java/com/webtoonviewer/network/ConnectionData.kt b/app/src/main/java/com/webtoonviewer/network/ConnectionData.kt new file mode 100644 index 0000000..61cc7ca --- /dev/null +++ b/app/src/main/java/com/webtoonviewer/network/ConnectionData.kt @@ -0,0 +1,10 @@ +package com.webtoonviewer.network + +object ConnectionData { + const val SHARED_FOLDER: String = "Media" + const val WEBTOON_FOLDER: String = "Webtoon" + const val USERNAME: String = "halio" + const val PASSWORD: String = "zhao8888" + const val DOMAIN: String = "" + const val HOSTNAME: String = "192.168.0.10" +} \ No newline at end of file diff --git a/app/src/main/java/com/webtoonviewer/network/SmbClientHelper.kt b/app/src/main/java/com/webtoonviewer/network/SmbClientHelper.kt new file mode 100644 index 0000000..7f0c941 --- /dev/null +++ b/app/src/main/java/com/webtoonviewer/network/SmbClientHelper.kt @@ -0,0 +1,201 @@ +package com.webtoonviewer.network + +import android.content.Context +import android.graphics.Bitmap +import android.graphics.BitmapFactory +import android.util.Log +import com.hierynomus.msdtyp.AccessMask +import com.hierynomus.msfscc.fileinformation.FileIdBothDirectoryInformation +import com.hierynomus.mssmb2.SMB2CreateDisposition +import com.hierynomus.mssmb2.SMB2ShareAccess +import com.hierynomus.smbj.SMBClient +import com.hierynomus.smbj.auth.AuthenticationContext +import com.hierynomus.smbj.connection.Connection +import com.hierynomus.smbj.session.Session +import com.hierynomus.smbj.share.DiskShare +import com.hierynomus.smbj.share.File +import com.webtoonviewer.storage.StorageManager +import com.webtoonviewer.utils.CommonUtils.pathJoin +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.withContext +import java.io.ByteArrayOutputStream +import java.io.FileOutputStream +import java.io.InputStream +import java.io.OutputStream + +class SmbClientHelper(private val context: Context) { + private lateinit var connection: Connection + private lateinit var session: Session + private lateinit var share: DiskShare + + suspend fun connect(): Boolean { + return try { + val client = SMBClient() + + // 使用 withContext 切换到 IO 线程执行连接操作 + withContext(Dispatchers.IO) { + connection = client.connect(ConnectionData.HOSTNAME) + Log.d("SmbClientHelper", "Connected to server: ${ConnectionData.HOSTNAME}") + + val ac = AuthenticationContext( + ConnectionData.USERNAME, ConnectionData.PASSWORD.toCharArray(), + ConnectionData.DOMAIN + ) + session = connection.authenticate(ac) + Log.d("SmbClientHelper", "Authenticated with username: ${ConnectionData.USERNAME}") + + share = session.connectShare(ConnectionData.SHARED_FOLDER) as DiskShare + Log.d("SmbClientHelper", "Connected to share: ${ConnectionData.SHARED_FOLDER}") + true + } + } catch (e: Exception) { + // 捕获 SMB 连接异常 + Log.e("SmbClientHelper", "Error connecting to share", e) + false + } + } + + fun getTitlesFromShare(): List { + return share.list(ConnectionData.WEBTOON_FOLDER) + } + + fun getEpisodesFormShare(title: String): List { + val path = ConnectionData.WEBTOON_FOLDER + "/" + title + return share.list(path) + } + + fun getChapterSumFromShare(title: String): Int { + val path = ConnectionData.WEBTOON_FOLDER + "/" + title + return share.list(path).count() - 3 + } + + fun getInformationFile(title: String): File { + return share.openFile( + pathJoin(ConnectionData.WEBTOON_FOLDER, title, "information.json"), + setOf(AccessMask.GENERIC_READ), + null, + SMB2ShareAccess.ALL, + SMB2CreateDisposition.FILE_OPEN, + null + ) + } + + suspend fun getImagePathsFromShare(title: String, episode: String): MutableList { + val episodeFolderPath = pathJoin(ConnectionData.WEBTOON_FOLDER, title, episode) + return withContext(Dispatchers.IO) { + var imageNames = mutableListOf() + for (item in share.list(episodeFolderPath)) { + val fileInfo = item as FileIdBothDirectoryInformation + if (fileInfo.fileName.endsWith(".jpg", true)) { + imageNames.add(fileInfo.fileName) + } + } + imageNames = imageNames.sortedBy { it.substringBefore('.').toInt() }.toMutableList() + imageNames.map { "$episodeFolderPath/$it" }.toMutableList() + } + } + + suspend fun loadImageFromShare(imagePath: String): Bitmap? { + return withContext(Dispatchers.IO) { + val file = share.openFile( + imagePath, + setOf(AccessMask.GENERIC_READ), + null, + SMB2ShareAccess.ALL, + SMB2CreateDisposition.FILE_OPEN, + null + ) + + val outputStream = ByteArrayOutputStream() + val inputStream: InputStream = file.inputStream + inputStream.copyTo(outputStream) + file.close() + + val imageData = outputStream.toByteArray() + BitmapFactory.decodeByteArray(imageData, 0, imageData.size) + } + } + + suspend fun downloadWebtoon(title: String) { + withContext(Dispatchers.IO) { + for (episode in getEpisodesFormShare(title)) { + if (episode.fileName != "." && episode.fileName != ".." && !episode.fileName.contains("information")) { + val dirName = title + "/" + episode.fileName + if (!StorageManager.isDirectoryExists(context, dirName)) { + StorageManager.createDirectory(context, dirName) + copyImages(getImagePathsFromShare(title, episode.fileName)) + } + } + } + } + } + + private suspend fun copyImages(imagePaths: MutableList) { + withContext(Dispatchers.IO) { + for (imagePath in imagePaths) { + val file = share.openFile( + imagePath, + setOf(AccessMask.GENERIC_READ), + null, + SMB2ShareAccess.ALL, + SMB2CreateDisposition.FILE_OPEN, + null + ) + + val outputFile = StorageManager.generateOutputFile(context, imagePath) + Log.d("ithi", "copyImages: ${outputFile}") + FileOutputStream(outputFile).use { outputStream -> + file.inputStream.use { inputStream -> + copyStream(inputStream, outputStream) + } + } + Log.d("SmbClientHelper", "Saved image to: ${outputFile.absolutePath}") + } + } + } + +// private suspend fun copyImages(imagePaths: MutableList) { +// withContext(Dispatchers.IO) { +// for (imagePath in imagePaths) { +// val file = share.openFile( +// imagePath, +// setOf(AccessMask.GENERIC_READ), +// null, +// SMB2ShareAccess.ALL, +// SMB2CreateDisposition.FILE_OPEN, +// null +// ) +// val outputFile = externalStorageHelper.generateOutputFile(imagePath) +// if (outputFile != null) { +// FileOutputStream(outputFile).use { outputStream -> +// file.inputStream.use { inputStream -> +// copyStream(inputStream, outputStream) +// } +// } +// Log.d("SmbClientHelper", "Saved image to: ${outputFile.absolutePath}") +// } +// } +// } +// } + + private fun copyStream(inputStream: InputStream, outputStream: OutputStream) { + val buffer = ByteArray(1024 * 4) // 4KB buffer + var bytesRead: Int + while (inputStream.read(buffer).also { bytesRead = it } != -1) { + outputStream.write(buffer, 0, bytesRead) + } + outputStream.flush() + } + + suspend fun disconnect() { + try { + withContext(Dispatchers.IO) { + share.close() + session.close() + connection.close() + } + } catch (e: Exception) { + Log.e("SmbClientHelper", "Error disconnecting", e) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/webtoonviewer/repository/BookInformation.kt b/app/src/main/java/com/webtoonviewer/repository/BookInformation.kt new file mode 100644 index 0000000..3c4cb66 --- /dev/null +++ b/app/src/main/java/com/webtoonviewer/repository/BookInformation.kt @@ -0,0 +1,9 @@ +package com.webtoonviewer.repository + +data class BookInformation( + val title: String, + val author: String, + val tag: String, + val description: String, + val thumbnail_name: String +) diff --git a/app/src/main/java/com/webtoonviewer/repository/BookRepository.kt b/app/src/main/java/com/webtoonviewer/repository/BookRepository.kt new file mode 100644 index 0000000..89bec87 --- /dev/null +++ b/app/src/main/java/com/webtoonviewer/repository/BookRepository.kt @@ -0,0 +1,70 @@ +package com.webtoonviewer.repository + +import android.content.Context +import android.util.Log +import com.webtoonviewer.db.AppDatabase +import com.webtoonviewer.db.Book + +class BookRepository(context: Context) { + private val bookDao = AppDatabase.getDatabase(context).bookDao() + + suspend fun getAllBookTitles(): MutableList { + return bookDao.getAllTitles().toMutableList() + } + + suspend fun getAllBooks(): MutableList { + return bookDao.getAllBooks().toMutableList() + } + + suspend fun getBookByTitle(title: String): Book? { + return bookDao.getBookByTitle(title) + } + + suspend fun getBookById(id: Int): Book? { + return bookDao.getBookById(id) + } + + suspend fun updateTitleById(id: Int, title: String) { + bookDao.updateTitleById(id, title) + } + + suspend fun updateInformationById(id: Int, info: BookInformation) { + bookDao.updateInformationById(id, info.author, info.tag, info.description, info.thumbnail_name) + } + + suspend fun updateDescriptionById(id: Int, description: String) { + bookDao.updateDescriptionById(id, description) + } + + suspend fun updateChaptersById(id: Int, chapters: List, chapterSum: Int) { + bookDao.updateChaptersById(id, chapters,chapterSum) + } + + suspend fun updateBookmarkById(id: Int, bookmarkChapter: String, bookmarkPosition: Int, bookmarkTopOffset: Int) { + bookDao.updateBookmarkById(id, bookmarkChapter, bookmarkPosition, bookmarkTopOffset) + } + + suspend fun updateIsLocal(id: Int, isLocal: Int) { + bookDao.updateIsLocalById(id, isLocal) + } + + suspend fun addNewBook(book: Book) { + bookDao.addBook(book) + } + + suspend fun copyBook(sourceId: Int, targetId: Int) { + val book = bookDao.getBookById(sourceId) + if (book != null) { + bookDao.updateTitleById(targetId, book.title) + bookDao.updateInformationById(targetId, book.author, book.tag, book.description, book.img) + bookDao.updateChaptersById(targetId, book.chapters, book.chapterSum) + bookDao.updateBookmarkById(targetId, book.bookmarkChapter, book.bookmarkPosition, book.bookmarkTopOffset) + bookDao.updateIsLocalById(targetId, book.isLocal) + } + } + + suspend fun deleteBookById(bookId: Int) { + bookDao.deleteBookById(bookId) + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/webtoonviewer/storage/StorageManager.kt b/app/src/main/java/com/webtoonviewer/storage/StorageManager.kt new file mode 100644 index 0000000..9c024d0 --- /dev/null +++ b/app/src/main/java/com/webtoonviewer/storage/StorageManager.kt @@ -0,0 +1,126 @@ +package com.webtoonviewer.storage + +import android.content.Context +import android.graphics.Bitmap +import android.graphics.BitmapFactory +import android.util.Log +import com.webtoonviewer.ui.data.FileItem +import java.io.File +import java.io.FileInputStream +import java.io.IOException + +object StorageManager { + + private fun getWebtoonDir(context: Context): File { + return File(context.filesDir, "Webtoon") + } + + // 检查指定目录是否存在 + fun isDirectoryExists(context: Context, dirName: String): Boolean { + val directory = File(getWebtoonDir(context), dirName) + return directory.exists() && directory.isDirectory + } + + // 创建目录 + fun createDirectory(context: Context, dirName: String) { + val directory = File(getWebtoonDir(context), dirName) + if (!directory.exists()) { + directory.mkdirs() // 创建目录及其子目录 + } + } + + // 删除目录及其内容 + fun deleteDirectory(context: Context, dirPath: String): Boolean { + val directory = File(dirPath) + return deleteRecursive(directory) + } + + // 递归删除文件和目录 + private fun deleteRecursive(fileOrDirectory: File): Boolean { + if (fileOrDirectory.isDirectory) { + fileOrDirectory.listFiles()?.forEach { child -> + if (!deleteRecursive(child)) { + return false + } + } + } + return fileOrDirectory.delete() + } + + // 获取目录下的文件列表 + fun getFilesAndDirectory(context: Context, dirPath: String): MutableList { + val directory = if (dirPath == "") { + context.filesDir + } else { + File(dirPath) + } + val fileItems = mutableListOf() + + directory.listFiles()?.forEach { file -> + fileItems.add(FileItem(file.name, file.isDirectory, file.absolutePath)) + } + return fileItems + } + + fun getFilesAndDirectorySum(context: Context, dirPath: String): Int { + val directory = if (dirPath == "") { + context.filesDir + } else { + File(dirPath) + } + return directory.listFiles()?.size ?: 0 + } + + fun getAllWebtoonTitles(context: Context): MutableList { + return getAllWebtoonTitles(getWebtoonDir(context)) + } + + private fun getAllWebtoonTitles(dir: File): MutableList { + val titles = mutableListOf() + val items = dir.listFiles() + if (items != null) { + for (item in items) { + if (item.isDirectory) { + titles.add(item.name) + } + } + } + return titles + } + + // 读取文件内容 + fun readFile(context: Context, dirName: String, fileName: String): String? { + val directory = File(context.filesDir, dirName) + val file = File(directory, fileName) + return if (file.exists()) { + file.readText() + } else { + null // 文件不存在时返回null + } + } + + fun generateOutputFile(context: Context, imagePath: String): File { + // imagePath: Webtoon/title/episode/image.jpg + return File(context.filesDir, imagePath) + } + + fun getImagePaths(context: Context, title: String, episode: String): MutableList { + val episodeDir = File(getWebtoonDir(context), "$title/$episode") + val imagePaths = mutableListOf() + val items = episodeDir.listFiles() + val sum = items?.size ?: 0 + for (i in 1 until sum + 1) { + imagePaths.add(File(episodeDir,"$i.jpg")) + } + return imagePaths + } + + fun loadImage(imagePath: File): Bitmap? { + return if (imagePath.exists()) { + val inputStream = FileInputStream(imagePath) + val bytes = inputStream.readBytes() + inputStream.close() + BitmapFactory.decodeByteArray(bytes, 0, bytes.size) + } else null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/webtoonviewer/ui/DescriptionActivity.kt b/app/src/main/java/com/webtoonviewer/ui/DescriptionActivity.kt new file mode 100644 index 0000000..905c8c7 --- /dev/null +++ b/app/src/main/java/com/webtoonviewer/ui/DescriptionActivity.kt @@ -0,0 +1,112 @@ +package com.webtoonviewer.ui + +import android.os.Bundle +import android.text.method.ScrollingMovementMethod +import android.util.Log +import android.view.View +import android.widget.AdapterView +import android.widget.ArrayAdapter +import android.widget.EditText +import android.widget.ImageButton +import android.widget.ScrollView +import android.widget.Spinner +import android.widget.TextView +import androidx.appcompat.app.AppCompatActivity +import androidx.lifecycle.lifecycleScope +import com.webtoonviewer.R +import com.webtoonviewer.db.Book +import com.webtoonviewer.repository.BookInformation +import com.webtoonviewer.repository.BookRepository +import com.webtoonviewer.utils.StatusBar.darkStatusBar +import kotlinx.coroutines.launch + +class DescriptionActivity : AppCompatActivity() { + private var bookRepository: BookRepository = BookRepository(this) + private lateinit var book: Book + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_description) + + val id = intent.getIntExtra("id", 0) + val description = intent.getStringExtra("description") + val scrollView: ScrollView = findViewById(R.id.scrollView) + val textView: TextView = findViewById(R.id.textViewDescriptionPage) + textView.text = description + val editText: EditText = findViewById(R.id.editTextDescriptionPage) + editText.setText(textView.text) + val spinner: Spinner = findViewById(R.id.spinnerDescriptionPage) + val buttonSubmit: ImageButton = findViewById(R.id.btnDescriptionPageSubmit) + + textView.setOnLongClickListener { + scrollView.visibility = View.GONE + textView.visibility = View.GONE + editText.visibility = View.VISIBLE + spinner.visibility = View.VISIBLE + buttonSubmit.visibility = View.VISIBLE + true + } + + editText.movementMethod = ScrollingMovementMethod() + + ArrayAdapter.createFromResource( + this, + R.array.tag_items, // 这里是你的字符串数组资源 + android.R.layout.simple_spinner_item + ).also { adapter -> + // 设置下拉菜单样式 + adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item) + // 将适配器应用于Spinner + spinner.adapter = adapter + } + + lifecycleScope.launch { + book = bookRepository.getBookById(id)!! + val tag = book.tag + val position = getPositionFromArray(R.array.tag_items, tag) + if (position != -1) { + spinner.setSelection(position) + } + } + + spinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { + override fun onItemSelected(parent: AdapterView<*>, view: View?, position: Int, id: Long) { + val selectedItem = parent.getItemAtPosition(position).toString() + Log.d("ithi", "onItemSelected: $selectedItem") + // 处理选中的项 + } + + override fun onNothingSelected(parent: AdapterView<*>) { + // 处理未选择任何项的情况 + } + } + + buttonSubmit.setOnClickListener { + lifecycleScope.launch { + val info = BookInformation( + book.title, + book.author, + spinner.selectedItem.toString(), + editText.text.toString(), + book.img) + bookRepository.updateDescriptionById(id, editText.text.toString()) + + bookRepository.updateInformationById(id, info) + scrollView.visibility = View.VISIBLE + textView.visibility = View.VISIBLE + editText.visibility = View.GONE + spinner.visibility = View.GONE + buttonSubmit.visibility = View.GONE + } + } + + val buttonClose: ImageButton = findViewById(R.id.btnDescriptionPageClose) + buttonClose.setOnClickListener { + finish() // 关闭当前 Activity + } + } + + private fun getPositionFromArray(arrayResId: Int, targetString: String): Int { + val array = resources.getStringArray(arrayResId) + return array.indexOf(targetString) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/webtoonviewer/ui/DialogAutoScrollSpeedFragment.kt b/app/src/main/java/com/webtoonviewer/ui/DialogAutoScrollSpeedFragment.kt new file mode 100644 index 0000000..f11c3bf --- /dev/null +++ b/app/src/main/java/com/webtoonviewer/ui/DialogAutoScrollSpeedFragment.kt @@ -0,0 +1,75 @@ +package com.webtoonviewer.ui + +import android.content.Context +import android.content.SharedPreferences +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.Button +import android.widget.TextView +import androidx.fragment.app.DialogFragment +import com.google.android.material.tabs.TabLayout +import com.webtoonviewer.R +import com.webtoonviewer.utils.SharedPreferencesHelper + +class DialogAutoScrollSpeedFragment: DialogFragment() { + private lateinit var speedPreferences: SharedPreferencesHelper + + companion object { + private const val ARG_PARAM = "param" + + fun newInstance(param: String): DialogAutoScrollSpeedFragment { + val fragment = DialogAutoScrollSpeedFragment() + val args = Bundle().apply { + putString(ARG_PARAM, param) + } + fragment.arguments = args + return fragment + } + } + + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { + return inflater.inflate(R.layout.dialog_auto_scroll_speed, container, false) + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + + speedPreferences = SharedPreferencesHelper(requireContext(), "auto_scroll_speed") + + val tabLayout: TabLayout = view.findViewById(R.id.tabLayoutDialogAutoScrollSpeed) + + // Adding tabs to TabLayout + val tabs = listOf("1x", "2x", "3x", "4x", "5x") + for (tab in tabs) { + tabLayout.addTab(tabLayout.newTab().setText(tab)) + } + + val title = arguments?.getString(ARG_PARAM) ?: "" + val textView: TextView = view.findViewById(R.id.textViewImageDialogTitle) + textView.text = title + val savedTab = speedPreferences.readData(title, "1x") + + // Set initial selected tab + val initialTabIndex = tabs.indexOf(savedTab) + tabLayout.getTabAt(initialTabIndex)?.select() + + // Handle tab selection + tabLayout.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener { + override fun onTabSelected(tab: TabLayout.Tab?) { + tab?.let { + val selectedText = it.text.toString() + speedPreferences.saveData(title, selectedText) + dismiss() + } + } + + override fun onTabUnselected(tab: TabLayout.Tab?) {} + override fun onTabReselected(tab: TabLayout.Tab?) {} + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/webtoonviewer/ui/DialogMainSettingsFragment.kt b/app/src/main/java/com/webtoonviewer/ui/DialogMainSettingsFragment.kt new file mode 100644 index 0000000..d79e248 --- /dev/null +++ b/app/src/main/java/com/webtoonviewer/ui/DialogMainSettingsFragment.kt @@ -0,0 +1,92 @@ +package com.webtoonviewer.ui + +import android.content.Intent +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.Button +import android.widget.CheckBox +import androidx.fragment.app.DialogFragment +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.webtoonviewer.R +import com.webtoonviewer.ui.adapter.TagAdapter +import com.webtoonviewer.ui.data.CheckboxItem +import com.webtoonviewer.utils.SharedPreferencesHelper + +class DialogMainSettingsFragment: DialogFragment() { + private lateinit var tagsVisibilityPreferences: SharedPreferencesHelper + + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { + return inflater.inflate(R.layout.dialog_main_settings, container, false) + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + + tagsVisibilityPreferences = SharedPreferencesHelper(requireContext(), "tags_visibility") + + val checkBoxShowAll: CheckBox = view.findViewById(R.id.checkBoxDialogMainSettingsShowAll) + checkBoxShowAll.isChecked = tagsVisibilityPreferences.getBoolean("showAll", false) + + // Initialize RecyclerView + val recyclerView: RecyclerView = view.findViewById(R.id.recyclerViewDialogMainSettingsTagList) + recyclerView.layoutManager = LinearLayoutManager(requireContext()) + val tagsItems = loadCheckboxItems() + val tagAdapter = TagAdapter(tagsItems) { position, isChecked -> + tagsItems[position].isChecked = isChecked + if (!isChecked) { + checkBoxShowAll.isChecked = false + } + } + + recyclerView.adapter = tagAdapter + + checkBoxShowAll.setOnCheckedChangeListener { _, isChecked -> + if (isChecked) { + tagAdapter.setItemsChecked() + } + } + + val subMitButton: Button = view.findViewById(R.id.btnDialogMainSettingsSubmit) + subMitButton.setOnClickListener { + var refresh_necessary = false + if (tagsVisibilityPreferences.getBoolean("showAll", false) != checkBoxShowAll.isChecked) { + tagsVisibilityPreferences.putBoolean("showAll", checkBoxShowAll.isChecked) + refresh_necessary = true + } + + tagsItems.forEach { item -> + if (tagsVisibilityPreferences.getBoolean(item.text, false) != item.isChecked) { + tagsVisibilityPreferences.putBoolean(item.text, item.isChecked) + refresh_necessary = true + } + } + dismiss() + if (refresh_necessary) { + (activity as? MainActivity)?.refreshActivity() // Refresh the activity + } + } + + val dirButton: Button = view.findViewById(R.id.btnDialogMainSettingsDirPage) + dirButton.setOnClickListener { + dismiss() + val intent = Intent(requireContext(), DirectoryActivity::class.java) + startActivity(intent) + } + } + + private fun loadCheckboxItems(): MutableList { + val tags = resources.getStringArray(R.array.tag_items) + val items = mutableListOf() + for (tag in tags) { + val isChecked = tagsVisibilityPreferences.getBoolean(tag, false) + items.add(CheckboxItem(tag, isChecked)) + } + return items + } +} \ No newline at end of file diff --git a/app/src/main/java/com/webtoonviewer/ui/DirectoryActivity.kt b/app/src/main/java/com/webtoonviewer/ui/DirectoryActivity.kt new file mode 100644 index 0000000..437b641 --- /dev/null +++ b/app/src/main/java/com/webtoonviewer/ui/DirectoryActivity.kt @@ -0,0 +1,101 @@ +package com.webtoonviewer.ui + +import android.os.Bundle +import android.util.Log +import android.view.View +import android.widget.Button +import android.widget.ImageButton +import android.widget.TextView +import androidx.appcompat.app.AppCompatActivity +import androidx.recyclerview.widget.GridLayoutManager +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.webtoonviewer.R +import com.webtoonviewer.storage.StorageManager +import com.webtoonviewer.ui.adapter.FileAdapter +import com.webtoonviewer.ui.data.FileItem +import java.io.File + +class DirectoryActivity : AppCompatActivity() { + + private lateinit var recyclerView: RecyclerView + private lateinit var fileAdapter: FileAdapter + private lateinit var titleTextView: TextView + private lateinit var sumTextView: TextView + private var currentDir: FileItem = FileItem("", true, "") + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_directory) + + titleTextView = findViewById(R.id.textViewDirPageTitle) + sumTextView = findViewById(R.id.textViewDirPageSum) + updateTopBar() + + recyclerView = findViewById(R.id.recyclerViewDirectoryList) + // recyclerView.layoutManager = GridLayoutManager(this, 3) + recyclerView.layoutManager = LinearLayoutManager(this) + + val fileItems = StorageManager.getFilesAndDirectory(this, currentDir.path) + fileAdapter = FileAdapter(fileItems) { fileItem -> + if (fileItem.isDirectory) { + val newFileItems = StorageManager.getFilesAndDirectory(this, fileItem.path) + if (newFileItems.size > 0) { + fileAdapter.updateFiles(newFileItems) + currentDir = fileItem + updateTopBar() + } + } else { + // Handle file click + Log.d("ithi", "文件点击: ${fileItem.name}") + } + } + recyclerView.adapter = fileAdapter + + val btnBack: ImageButton = findViewById(R.id.btnDirPageBack) + btnBack.setOnClickListener { + if (currentDir.name == "" || currentDir.name == "files") { + finish() + } else { + val newPath: String = File(currentDir.path).parent ?: "" + val newName: String = File(currentDir.path).parentFile?.name ?: "" + val newFileItems = StorageManager.getFilesAndDirectory(this, newPath) + fileAdapter.updateFiles(newFileItems) + currentDir = FileItem(newName, true, newPath) + updateTopBar() + } + } + + val btnSubmit: Button = findViewById(R.id.btnDirPageSubmit) + btnSubmit.setOnClickListener { + fileAdapter.toggleCheckboxesVisibility() + btnSubmit.visibility = View.GONE + val selectedFiles = fileAdapter.getSelectedFiles() + // 在这里处理选中的文件 + selectedFiles.forEach { file -> + StorageManager.deleteDirectory(this, file.path) + } + val newFileItems = StorageManager.getFilesAndDirectory(this, currentDir.path) + fileAdapter.updateFiles(newFileItems) + } + + val btnDelete: ImageButton = findViewById(R.id.btnDirPageDelete) + btnDelete.setOnClickListener { + if (currentDir.name != "" && currentDir.name != "files") { + fileAdapter.toggleCheckboxesVisibility() + btnSubmit.visibility = View.VISIBLE + } + } + } + + private fun updateTopBar() { + titleTextView.text = if (currentDir.name == "" || currentDir.name == "files") { + "内部存储目录" + } else { + currentDir.name + } + + sumTextView.text = StorageManager.getFilesAndDirectorySum(this, currentDir.path).toString() + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/webtoonviewer/ui/EpisodesActivity.kt b/app/src/main/java/com/webtoonviewer/ui/EpisodesActivity.kt new file mode 100644 index 0000000..24b655e --- /dev/null +++ b/app/src/main/java/com/webtoonviewer/ui/EpisodesActivity.kt @@ -0,0 +1,216 @@ +package com.webtoonviewer.ui + +import android.app.Activity +import android.content.Intent +import android.os.Bundle +import android.util.Log +import android.view.View +import android.widget.ImageButton +import android.widget.ImageView +import android.widget.TextView +import android.widget.Toast +import androidx.activity.OnBackPressedCallback +import androidx.activity.viewModels +import androidx.appcompat.app.AppCompatActivity +import androidx.lifecycle.Observer +import androidx.lifecycle.lifecycleScope +import androidx.recyclerview.widget.GridLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.webtoonviewer.R +import com.webtoonviewer.db.Book +import com.webtoonviewer.network.SmbClientHelper +import com.webtoonviewer.repository.BookRepository +import com.webtoonviewer.ui.adapter.EpisodeAdapter +import com.webtoonviewer.ui.component.DownloadViewModel +import com.webtoonviewer.utils.CommonUtils.getEpisodeNameFromEpisode +import com.webtoonviewer.utils.CommonUtils.getEllipsizedText +import com.webtoonviewer.utils.SharedPreferencesHelper +import com.webtoonviewer.utils.Webtoon18Plus.WEBTOON18PLUS +import com.webtoonviewer.utils.loadImgFromAssets +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.GlobalScope +import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext + +class EpisodesActivity : AppCompatActivity() { + private val bookRepository: BookRepository = BookRepository(this) + private val bookIdPreferences: SharedPreferencesHelper = SharedPreferencesHelper(this, "book_id") + private val downloadingPreference: SharedPreferencesHelper = SharedPreferencesHelper(this, "downloading") + + private lateinit var recyclerView: RecyclerView + private lateinit var episodeAdapter: EpisodeAdapter + private lateinit var book: Book + private lateinit var title: String + private lateinit var currentEpisode: String + private lateinit var currentEpisodeTextView: TextView + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_episodes) + + recyclerView = findViewById(R.id.recyclerViewEpisodesPageEpisodeList) + recyclerView.layoutManager = GridLayoutManager(this, 4) + + title = intent.getStringExtra("selectedTitle") ?: "" + val thumbnail = intent.getStringExtra("thumbnail") ?: "" + if (title != "") { + val titleTextView: TextView = findViewById(R.id.textViewEpisodesPageTitle) + titleTextView.text = title + + val titleImageView: ImageView = findViewById(R.id.imageViewEpisodesPageImg) + val bitmap = loadImgFromAssets(this, thumbnail) + if (bitmap != null) { + titleImageView.setImageBitmap(bitmap) + } else { + titleImageView.setImageResource(R.drawable.ic_launcher_background) + } + + val btnDownload: ImageButton = findViewById(R.id.btnEpisodesPageDownload) + + lifecycleScope.launch { + withContext(Dispatchers.IO) { + val id = bookIdPreferences.readData(title, "0").toInt() + book = bookRepository.getBookById(id)!! + + val authorTextView: TextView = findViewById(R.id.textViewEpisodesPageAuthor) + authorTextView.text = book.author + + currentEpisodeTextView = findViewById(R.id.textViewEpisodesPageCurrentEpisode) + currentEpisode = book.bookmarkChapter + setCurrentEpisodeTextView() + + currentEpisodeTextView.setOnClickListener { + val intent = Intent(this@EpisodesActivity, ImagesActivity::class.java) + intent.putExtra("selectedTitle", book.title) + intent.putExtra("selectedChapter", currentEpisode) + intent.putExtra("thumbnail", book.img) + intent.putExtra("position", book.bookmarkPosition) + intent.putExtra("offset", book.bookmarkTopOffset) + startActivity(intent) + } + + val btnDescription: ImageButton = findViewById(R.id.btnEpisodesPageDescription) + btnDescription.setOnClickListener { + val intent = Intent(this@EpisodesActivity, DescriptionActivity::class.java) + intent.putExtra("id", book.id) + intent.putExtra("description", book.description) + startActivity(intent) + } + + val isDownloading = downloadingPreference.readData("key", "n") + if (book.isLocal == 0 && isDownloading == "n") { + btnDownload.visibility = View.VISIBLE + } + } + // 数据加载完毕,更新 UI + withContext(Dispatchers.Main) { + episodeAdapter = EpisodeAdapter(book.chapters) { selectedChapter -> + val intent = Intent(this@EpisodesActivity, ImagesActivity::class.java) + + intent.putExtra("selectedTitle", title) + intent.putExtra("selectedChapter", selectedChapter) + intent.putExtra("thumbnail", thumbnail) + startActivity(intent) + } + recyclerView.adapter = episodeAdapter + } + } + + btnDownload.setOnClickListener{ + btnDownload.visibility = View.GONE + downloadingPreference.saveData("key", "y") + val smbClientHelper = SmbClientHelper(this) + GlobalScope.launch(Dispatchers.IO) { + var isConnect = false + try { + isConnect = smbClientHelper.connect() + if (isConnect) { + withContext(Dispatchers.Main) { + Toast.makeText(this@EpisodesActivity, "开始下载", Toast.LENGTH_SHORT).show() + } + smbClientHelper.downloadWebtoon(title) + } + } catch (e: Exception) { + Log.e("SMB", "Error accessing SMB share", e) + } finally { + if (isConnect) { + smbClientHelper.disconnect() + withContext(Dispatchers.Main) { + Toast.makeText(this@EpisodesActivity, "下载完毕", Toast.LENGTH_SHORT).show() + } + } + bookRepository.updateIsLocal(book.id, 1) + downloadingPreference.saveData("key", "n") + } + } + } + } + + val btn18: ImageButton = findViewById(R.id.btnEpisodesPage18) + if (WEBTOON18PLUS.contains("$title[18+]")) { + btn18.visibility = View.VISIBLE + btn18.setOnClickListener { + val intent = Intent(this, EpisodesActivity::class.java) + intent.putExtra("selectedTitle", "$title[18+]") + intent.putExtra("thumbnail", thumbnail) + startActivity(intent) + } + } + + val btnBack: ImageButton = findViewById(R.id.btnEpisodesPageHome) + btnBack.setOnClickListener { + returnToLastActivity() + } + + onBackPressedDispatcher.addCallback(this, object: OnBackPressedCallback(true) { + override fun handleOnBackPressed() { + returnToLastActivity() + } + }) + } + + override fun onResume() { + super.onResume() + lifecycleScope.launch { + refreshData() + } + } + + private suspend fun refreshData() { + val id = bookIdPreferences.readData(title, "0").toInt() + book = bookRepository.getBookById(id)!! + currentEpisode = book.bookmarkChapter + setCurrentEpisodeTextView() + + } + + private fun setCurrentEpisodeTextView() { + if (currentEpisode != "") { + currentEpisodeTextView.post { + currentEpisodeTextView.text = getEllipsizedText( + currentEpisodeTextView, "${"继续阅读: " + getEpisodeNameFromEpisode(currentEpisode)} >>" + ) + } + } else { + currentEpisode = book.chapters[0] + currentEpisodeTextView.post { + currentEpisodeTextView.text = getEllipsizedText( + currentEpisodeTextView, + "开始阅读: ${getEpisodeNameFromEpisode(currentEpisode)} >>" + ) + } + } + } + + private fun returnToLastActivity() { + val resultIntent = Intent().apply { + putExtra("bookmarkUpdated", book.title) + } + setResult(Activity.RESULT_OK, resultIntent) + finish() + } + +} + + + diff --git a/app/src/main/java/com/webtoonviewer/ui/ImagesActivity.kt b/app/src/main/java/com/webtoonviewer/ui/ImagesActivity.kt new file mode 100644 index 0000000..0f2d243 --- /dev/null +++ b/app/src/main/java/com/webtoonviewer/ui/ImagesActivity.kt @@ -0,0 +1,417 @@ +package com.webtoonviewer.ui + +import android.app.Activity +import android.content.Intent +import android.graphics.Bitmap +import android.os.Bundle +import android.util.Log +import android.view.View +import android.view.WindowInsets +import android.widget.ImageButton +import android.widget.TextView +import android.widget.Toast +import androidx.activity.OnBackPressedCallback +import androidx.activity.enableEdgeToEdge +import androidx.appcompat.app.AppCompatActivity +import androidx.constraintlayout.widget.ConstraintLayout +import androidx.lifecycle.lifecycleScope +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.webtoonviewer.R +import com.webtoonviewer.db.Book +import com.webtoonviewer.network.SmbClientHelper +import com.webtoonviewer.repository.BookRepository +import com.webtoonviewer.storage.StorageManager +import com.webtoonviewer.ui.adapter.ImageAdapter +import com.webtoonviewer.ui.component.SmoothScroller +import com.webtoonviewer.utils.CommonUtils.getEpisodeIndexFromEpisode +import com.webtoonviewer.utils.CommonUtils.getEpisodeNameFromEpisode +import com.webtoonviewer.utils.CommonUtils.getEllipsizedText +import com.webtoonviewer.utils.SharedPreferencesHelper +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext +import java.io.File + + +class ImagesActivity : AppCompatActivity() { + + private val bookRepository: BookRepository = BookRepository(this) + private val smbClientHelper: SmbClientHelper = SmbClientHelper(this) + private val bookIdPreferences: SharedPreferencesHelper = SharedPreferencesHelper(this, "book_id") + private val speedPreference: SharedPreferencesHelper = SharedPreferencesHelper(this, "auto_scroll_speed") + + private lateinit var recyclerView: RecyclerView + private lateinit var imageAdapter: ImageAdapter + private lateinit var currentChapter: String + private lateinit var title: String + private lateinit var book: Book + + private lateinit var topBar: ConstraintLayout + private lateinit var bottomBar: ConstraintLayout + private var isControlsVisible = true + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + enableEdgeToEdge() + window.insetsController?.hide(WindowInsets.Type.systemBars()) + setContentView(R.layout.activity_images) + + recyclerView = findViewById(R.id.recyclerViewImagesList) + recyclerView.layoutManager = LinearLayoutManager(this) + imageAdapter = ImageAdapter(mutableListOf()) { + toggleControlsVisibility() + } + recyclerView.adapter = imageAdapter + recyclerView.layoutManager = LinearLayoutManager(this) + + recyclerView.addOnScrollListener(object : RecyclerView.OnScrollListener() { + override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) { + super.onScrolled(recyclerView, dx, dy) + hideBars() + + // Get the height of the RecyclerView and its content + val recyclerViewHeight = recyclerView.height + val recyclerViewContentHeight = recyclerView.computeVerticalScrollRange() + val recyclerViewScrollY = recyclerView.computeVerticalScrollOffset() + + // Check if the RecyclerView has scrolled to the bottom + if (recyclerViewContentHeight <= recyclerViewHeight + recyclerViewScrollY) { + showBars() + } + } + }) + + topBar = findViewById(R.id.imagePageTopBar) + bottomBar = findViewById(R.id.imagePageBottomBar) + + currentChapter = intent.getStringExtra("selectedChapter") ?: "" + title = intent.getStringExtra("selectedTitle") ?: "" + val thumbnail = intent.getStringExtra("thumbnail") ?: "" + val position = intent.getIntExtra("position", 0) + val offset = intent.getIntExtra("offset", 0) + + val chapterTextView: TextView = findViewById(R.id.textViewImagePageChapter) + chapterTextView.post { + chapterTextView.text = getEllipsizedText( + chapterTextView, getEpisodeNameFromEpisode(currentChapter) + ) + } + + lifecycleScope.launch { + book = getBook() + if (position == 0 && offset == 0) { + loadImagesIncrementally() + } else { + loadImagesAllAtOnce(position, offset) + } + } + + val btnPrev: ImageButton = findViewById(R.id.btnImagePagePrev) + btnPrev.setOnClickListener { + if (hasPrevChapter(currentChapter)) { + val newChapter = getPrevChapter(currentChapter) + currentChapter = newChapter + imageAdapter.initImages() + loadImagesAllAtOnce(-1, -1) + chapterTextView.post { + chapterTextView.text = getEllipsizedText( + chapterTextView, getEpisodeNameFromEpisode(currentChapter) + ) + } + } else { + Toast.makeText(this@ImagesActivity, "这是最初的章节。", Toast.LENGTH_SHORT).show() + } + } + + val btnNext: ImageButton = findViewById(R.id.btnImagePageNext) + btnNext.setOnClickListener { + Log.d("ithi", "currentChapter: $currentChapter") + + if (hasNextChapter(currentChapter)) { + val newChapter = getNextChapter(currentChapter) + currentChapter = newChapter + imageAdapter.initImages() + loadImagesIncrementally() + scrollToTop() + chapterTextView.post { + chapterTextView.text = getEllipsizedText( + chapterTextView, getEpisodeNameFromEpisode(currentChapter) + ) + } + lifecycleScope.launch { + savePosition() + } + } else { + Toast.makeText(this@ImagesActivity, "这已经是最后一话了。", Toast.LENGTH_SHORT).show() + } + } + + val btnBack: ImageButton = findViewById(R.id.btnImagePageBack) + btnBack.setOnClickListener { + returnToLastActivity() + } + + val btnHome: ImageButton = findViewById(R.id.btnImagePageHome) + btnHome.setOnClickListener { + val intent = Intent(this, MainActivity::class.java) + intent.putExtra("bookmarkUpdated", book.title) + startActivity(intent) + } + + val btnList: ImageButton = findViewById(R.id.btnImagePageList) + btnList.setOnClickListener { + val intent = Intent(this@ImagesActivity, EpisodesActivity::class.java) + intent.putExtra("selectedTitle", title) + intent.putExtra("thumbnail", thumbnail) + startActivity(intent) + } + + val btnPlay: ImageButton = findViewById(R.id.btnImagePagePlay) + btnPlay.setOnClickListener { + val bottomOffset = calculateBottomOffset() + val speed = speedPreference.readData(title, "1x") + smoothScrollToBottomWithOffset(bottomOffset, speed) + } + + val btnMenu: ImageButton = findViewById(R.id.btnImagePageMenu) + + btnMenu.setOnClickListener { + val dialog = DialogAutoScrollSpeedFragment.newInstance(title) + dialog.isCancelable = true + dialog.show(supportFragmentManager, "DialogAutoScrollSpeedFragment") + } + + onBackPressedDispatcher.addCallback(this, object: OnBackPressedCallback(true) { + override fun handleOnBackPressed() { + returnToLastActivity() + } + }) + } + + private fun loadImagesIncrementally() { + if (book.isLocal == 1) { + loadImagesAllAtOnce(0, 0) + } else { + lifecycleScope.launch { + var isConnect = false + try { + isConnect = smbClientHelper.connect() + if (isConnect) { + val newImagePaths = getImagePathsFromShare() + newImagePaths.forEach { + val bitmap = loadImageFromShare(it) + if (bitmap != null) { + imageAdapter.addImage(bitmap) + } + } + } + } finally { + if (isConnect) { + smbClientHelper.disconnect() + } + } + } + } + } + + private fun loadImagesAllAtOnce(position: Int, offset: Int) { + if (book.isLocal == 1) { + lifecycleScope.launch { + val newImagePaths = getImagePathsFromStorage(book.title, currentChapter) + val bitmaps = withContext(Dispatchers.IO) { + newImagePaths.mapNotNull { loadImageFromStorage(it) } + } + imageAdapter.updateImages(bitmaps) + if (position == -1 && offset == -1) { + val newPosition = bitmaps.size - 1 + val newOffset = calculateBottomOffset() + scrollToPosition(newPosition, newOffset) + } else { + scrollToPosition(position, offset) + } + } + } else { + lifecycleScope.launch { + var isConnect = false + try { + isConnect = smbClientHelper.connect() + if (isConnect) { + val newImagePaths = getImagePathsFromShare() + val bitmaps = withContext(Dispatchers.IO) { + newImagePaths.mapNotNull { loadImageFromShare(it) } + } + imageAdapter.updateImages(bitmaps) + if (position == -1 && offset == -1) { + val newPosition = bitmaps.size - 1 + val newOffset = calculateBottomOffset() + scrollToPosition(newPosition, newOffset) + } else { + scrollToPosition(position, offset) + } + } + } finally { + if (isConnect) { + smbClientHelper.disconnect() + } + } + } + } + } + + private suspend fun getImagePathsFromShare(): MutableList { + return smbClientHelper.getImagePathsFromShare(title, currentChapter) + } + + private suspend fun loadImageFromShare(imagePath: String): Bitmap? { + return smbClientHelper.loadImageFromShare(imagePath) + } + + private fun getImagePathsFromStorage(title: String, chapter: String): MutableList { + return StorageManager.getImagePaths(this, title, chapter) + } + + private fun loadImageFromStorage(imagePath: File): Bitmap? { + return StorageManager.loadImage(imagePath) + } + + private suspend fun getBook(): Book { + return withContext(Dispatchers.IO) { + val bookId = bookIdPreferences.readData(title, "0").toInt() + bookRepository.getBookById(bookId)!! + } + } + + private fun hasPrevChapter(selectedChapter: String): Boolean { + val chapterIndex = getEpisodeIndexFromEpisode(selectedChapter) + return chapterIndex > 0 + } + + private fun hasNextChapter(selectedChapter: String): Boolean { + val chapters = book.chapters + val chapterIndex = getEpisodeIndexFromEpisode(selectedChapter) + return chapterIndex < chapters.size - 1 + } + + private fun getPrevChapter(selectedChapter: String): String { + val chapters = book.chapters + val chapterIndex = getEpisodeIndexFromEpisode(selectedChapter) + return chapters[chapterIndex - 1] + } + + private fun getNextChapter(selectedChapter: String): String { + val chapters = book.chapters + val chapterIndex = getEpisodeIndexFromEpisode(selectedChapter) + return chapters[chapterIndex + 1] + } + + private fun generateChapterName(): String { + val chapter = getEpisodeNameFromEpisode(currentChapter) + if (chapter.contains(" ")) { + val parts = chapter.split(" ") + if (parts.size == 2) { + return parts[0] + } else if (parts.size >= 3) { + return parts[0] + parts[parts.size - 1] + } + } else if (chapter.length > 5) { + return chapter.substring(0, 4) + "..." + } + return chapter + } + + private suspend fun savePosition() { + withContext(Dispatchers.IO) { + val layoutManager = recyclerView.layoutManager as? LinearLayoutManager + layoutManager?.let { + val scrollPosition = it.findFirstVisibleItemPosition() + val topView = recyclerView.getChildAt(0) + val topOffset = topView?.top ?: 0 + bookRepository.updateBookmarkById(book.id, currentChapter, scrollPosition,topOffset) + } + } + } + + private fun scrollToTop() { + (recyclerView.layoutManager as LinearLayoutManager).scrollToPosition(0) + } + + private fun scrollToPosition(position: Int, offset: Int) { + (recyclerView.layoutManager as LinearLayoutManager).scrollToPositionWithOffset(position, offset) + } + + private fun toggleControlsVisibility() { + if (isControlsVisible) { + hideBars() + } else { + showBars() + } + } + + private fun hideBars() { + topBar.visibility = View.GONE + bottomBar.visibility = View.GONE + isControlsVisible = false + window.insetsController?.hide(WindowInsets.Type.systemBars()) + } + + private fun showBars() { + topBar.visibility = View.VISIBLE + bottomBar.visibility = View.VISIBLE + isControlsVisible = true + } + + private fun calculateBottomOffset(): Int { + val layoutManager = recyclerView.layoutManager as LinearLayoutManager + val lastVisibleItemPosition = layoutManager.findLastVisibleItemPosition() + val lastVisibleItemView = layoutManager.findViewByPosition(lastVisibleItemPosition) + + val recyclerViewHeight = recyclerView.height + val bottomOffset = if (lastVisibleItemView != null) { + recyclerViewHeight - (lastVisibleItemView.bottom - lastVisibleItemView.top) + } else { + 0 + } + + return bottomOffset + } + + private fun smoothScrollToBottomWithOffset(offset: Int, speed: String) { + val layoutManager = recyclerView.layoutManager as? LinearLayoutManager ?: return + val smoothScroller = SmoothScroller(this, offset, speed) + + // 设置滚动到最后一项并添加底部偏移量 + smoothScroller.targetPosition = imageAdapter.itemCount - 1 + layoutManager.startSmoothScroll(smoothScroller) + } + + override fun onSaveInstanceState(outState: Bundle) { + super.onSaveInstanceState(outState) + lifecycleScope.launch { + savePosition() + } + } + + override fun onPause() { + super.onPause() + lifecycleScope.launch { + savePosition() + } + } + + override fun onDestroy() { + super.onDestroy() + lifecycleScope.launch { + savePosition() + smbClientHelper.disconnect() + } + } + + private fun returnToLastActivity() { + val resultIntent = Intent().apply { + putExtra("bookmarkUpdated", book.title) + } + setResult(Activity.RESULT_OK, resultIntent) + finish() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/webtoonviewer/ui/MainActivity.kt b/app/src/main/java/com/webtoonviewer/ui/MainActivity.kt new file mode 100644 index 0000000..04aeaec --- /dev/null +++ b/app/src/main/java/com/webtoonviewer/ui/MainActivity.kt @@ -0,0 +1,167 @@ +package com.webtoonviewer.ui + +import android.content.Intent +import android.os.Bundle +import android.widget.ImageButton +import android.widget.TextView +import androidx.activity.result.contract.ActivityResultContracts +import androidx.appcompat.app.AppCompatActivity +import androidx.lifecycle.lifecycleScope +import androidx.recyclerview.widget.GridLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.webtoonviewer.R +import com.webtoonviewer.repository.BookRepository +import com.webtoonviewer.ui.adapter.TitleAdapter +import com.webtoonviewer.ui.data.TitleItem +import com.webtoonviewer.utils.SharedPreferencesHelper +import com.webtoonviewer.utils.Webtoon18Plus.WEBTOON18PLUS +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext + +class MainActivity : AppCompatActivity(), TitleAdapter.OnItemClickListener { + + private val bookIdPreferences: SharedPreferencesHelper = SharedPreferencesHelper(this, "book_id") + private val tagsVisibilityPreferences: SharedPreferencesHelper = SharedPreferencesHelper(this, "tags_visibility") + private lateinit var bookRepository: BookRepository + + private lateinit var recyclerView: RecyclerView + private lateinit var mainAdapter: TitleAdapter + private lateinit var titleItems: MutableList + +// private val manageExternalStoragePermissionLauncher = +// registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { +// if (android.os.Environment.isExternalStorageManager()) { +// Toast.makeText(this, "外部存储权限已授予", Toast.LENGTH_SHORT).show() +// } else { +// Toast.makeText(this, "外部存储权限被拒绝", Toast.LENGTH_SHORT).show() +// } +// } + + private val startForResult = + registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result -> + if (result.resultCode == RESULT_OK) { + val data: Intent? = result.data + val title = data?.getStringExtra("bookmarkUpdated") + title?.let { + // 在当前 Activity 的协程作用域中调用 refreshData + lifecycleScope.launch { + refreshData(it) + } + } + } + } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_main) + + val textViewWV : TextView = findViewById(R.id.textViewMainPage) + textViewWV.setOnClickListener { + refreshActivity() + } + + val settingsButton: ImageButton = findViewById(R.id.btnMainPage) + settingsButton.setOnClickListener { + val dialog = DialogMainSettingsFragment() + dialog.show(supportFragmentManager, "DialogMainSettingsFragment") + } + + bookRepository = BookRepository(this) + +// if (!externalStoragePermission.hasManageExternalStoragePermission()) { +// externalStoragePermission.requestManageExternalStoragePermission( +// manageExternalStoragePermissionLauncher +// ) +// } + + recyclerView = findViewById(R.id.recyclerViewTitleList) + recyclerView.layoutManager = GridLayoutManager(this, 3) + + titleItems = mutableListOf() + + lifecycleScope.launch { + withContext(Dispatchers.IO) { + val titles = bookRepository.getAllBookTitles() + titleItems = generateTitleItems(titles) + } + // 数据加载完毕,更新 UI + withContext(Dispatchers.Main) { + mainAdapter = TitleAdapter(this@MainActivity, titleItems, this@MainActivity) + recyclerView.adapter = mainAdapter + } + } + + lifecycleScope.launch { + val bookmarkUpdated = intent.getStringExtra("bookmarkUpdated") ?: "" + if (bookmarkUpdated != "") { + refreshData(bookmarkUpdated) + } + } + } + + private suspend fun generateTitleItems(titles: MutableList): MutableList { + val titleItems: MutableList = mutableListOf() + withContext(Dispatchers.IO) { + for (title in titles) { + if (!WEBTOON18PLUS.contains(title)) { + val id = bookIdPreferences.readData(title, "0").toInt() + val book = bookRepository.getBookById(id) + val tag = book?.tag ?: "" + if (tagsVisibilityPreferences.getBoolean("showAll", false) || + tagsVisibilityPreferences.getBoolean(tag, false)) { + val imageName = book?.img ?: "" + val chapter = if (book?.bookmarkChapter.isNullOrEmpty()) { + book?.chapters?.get(0).toString() + } else { + book?.bookmarkChapter ?: "" + } + val position = book?.bookmarkPosition ?: 0 + val offset = book?.bookmarkTopOffset ?: 0 + titleItems.add(TitleItem(imageName, title, tag, chapter, position, offset)) + } + } + } + } + return titleItems + } + + override fun clickToEpisodeList(titleItem: TitleItem) { + val intent = Intent(this, EpisodesActivity::class.java) + intent.putExtra("selectedTitle", titleItem.title) + intent.putExtra("thumbnail", titleItem.thumbnail) + startForResult.launch(intent) + } + + override fun clickToSingleEpisode(titleItem: TitleItem) { + val intent = Intent(this, ImagesActivity::class.java) + intent.putExtra("selectedTitle", titleItem.title) + intent.putExtra("selectedChapter", titleItem.chapter) + intent.putExtra("thumbnail", titleItem.thumbnail) + intent.putExtra("position", titleItem.position) + intent.putExtra("offset", titleItem.offset) + startForResult.launch(intent) + } + + private suspend fun refreshData(title: String) { + val titleItem = titleItems.find { it.title == title } + val id = bookIdPreferences.readData(title, "0").toInt() + val book = bookRepository.getBookById(id) + + titleItem?.chapter = if (book?.bookmarkChapter.isNullOrEmpty()) { + book?.chapters?.get(0).toString() + } else { + book?.bookmarkChapter ?: "" + } + titleItem?.position = book?.bookmarkPosition ?: 0 + titleItem?.offset = book?.bookmarkTopOffset ?: 0 + if (titleItem != null) { + mainAdapter.updateItem(titleItem) + } + } + + fun refreshActivity() { + finish() + startActivity(intent) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/webtoonviewer/ui/adapter/EpisodeAdapter.kt b/app/src/main/java/com/webtoonviewer/ui/adapter/EpisodeAdapter.kt new file mode 100644 index 0000000..c365fe9 --- /dev/null +++ b/app/src/main/java/com/webtoonviewer/ui/adapter/EpisodeAdapter.kt @@ -0,0 +1,43 @@ +package com.webtoonviewer.ui.adapter + +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.webtoonviewer.R +import com.webtoonviewer.utils.CommonUtils.getEllipsizedText +import com.webtoonviewer.utils.CommonUtils.getShortNameFromEpisode + +class EpisodeAdapter( + private val chapters: MutableList, + private val onItemClick: (String) -> Unit +) : RecyclerView.Adapter() { + + class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val chapterTextView: TextView = itemView.findViewById(R.id.tvItem) + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { + val view = LayoutInflater.from(parent.context) + .inflate(R.layout.item_text, parent, false) + return ViewHolder(view) + } + + override fun onBindViewHolder(holder: ViewHolder, position: Int) { + val chapterTextView: TextView = holder.chapterTextView + chapterTextView.post { +// chapterTextView.text = getEllipsizedText(chapterTextView, chapters[position].split(".")[1]) + chapterTextView.text = getEllipsizedText(chapterTextView, getShortNameFromEpisode(chapters[position])) + } + + holder.itemView.setOnClickListener { + onItemClick(chapters[position]) + } + } + + override fun getItemCount(): Int { + return chapters.size + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/webtoonviewer/ui/adapter/FileAdapter.kt b/app/src/main/java/com/webtoonviewer/ui/adapter/FileAdapter.kt new file mode 100644 index 0000000..d6e89c7 --- /dev/null +++ b/app/src/main/java/com/webtoonviewer/ui/adapter/FileAdapter.kt @@ -0,0 +1,115 @@ +package com.webtoonviewer.ui.adapter + +import android.graphics.Bitmap +import android.text.format.Formatter.formatFileSize +import android.util.Log +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.CheckBox +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.webtoonviewer.R +import com.webtoonviewer.ui.data.FileItem +import com.webtoonviewer.utils.CommonUtils.getEllipsizedText +import com.webtoonviewer.utils.CommonUtils.getShortNameFromEpisode +import java.io.File + +class FileAdapter( + private val fileList: MutableList, + private val onItemClick: (FileItem) -> Unit +) : RecyclerView.Adapter() { + + private var showCheckboxes: Boolean = false + private val selectedFiles = mutableListOf() + + class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val fileNameTextView: TextView = itemView.findViewById(R.id.textViewFileNameItem) + val infoTextView: TextView = itemView.findViewById(R.id.textViewFileInfoItem) + val iconImageView: ImageView = itemView.findViewById(R.id.file_icon) + val checkBox: CheckBox = itemView.findViewById(R.id.file_checkbox) + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { + val view = LayoutInflater.from(parent.context).inflate(R.layout.item_file, parent, false) + return ViewHolder(view) + } + + override fun onBindViewHolder(holder: ViewHolder, position: Int) { + val file = fileList[position] + val fileNameTextView: TextView = holder.fileNameTextView + fileNameTextView.text = file.name + + holder.itemView.setOnClickListener { + onItemClick(file) + } + holder.checkBox.visibility = if (showCheckboxes) View.VISIBLE else View.GONE + holder.checkBox.isChecked = selectedFiles.contains(file) + + holder.checkBox.setOnCheckedChangeListener { _, isChecked -> + if (isChecked) { + // 如果选中,加入选中的文件列表 + selectedFiles.add(file) + } else { + // 如果取消选中,移除选中的文件 + selectedFiles.remove(file) + } + } + + if (File(file.path).isDirectory) { + // 如果是目录,显示目录图标和包含项目数量 + holder.iconImageView.setImageResource(R.drawable.folder_18) // 设置为目录图标 + val itemsCount = File(file.path).listFiles()?.size ?: 0 + holder.infoTextView.text = "$itemsCount items" + } else { + // 如果是文件,显示文件图标和文件大小 + holder.iconImageView.setImageResource(R.drawable.document_18) // 设置为文件图标 + val fileSize = formatFileSize(File(file.path).length()) // 格式化文件大小 + holder.infoTextView.text = fileSize + } + } + + override fun getItemCount(): Int { + return fileList.size + } + + private fun initFiles() { + fileList.clear() + } + + private fun sortFiles(fileItems: MutableList): MutableList { + val sortedList: MutableList = fileItems + if (sortedList[0].name.split(".").isNotEmpty()) + sortedList.sortBy { + it.name.substringBefore('.').toIntOrNull() ?: Int.MAX_VALUE + } + return sortedList + } + + fun updateFiles(fileItems: MutableList) { + initFiles() + val sortedFiles = sortFiles(fileItems) + fileList.addAll(sortedFiles) + notifyDataSetChanged() + } + + private fun formatFileSize(size: Long): String { + val kb = size / 1024.0 + val mb = kb / 1024.0 + return when { + mb >= 1 -> String.format("%.2f MB", mb) + kb >= 1 -> String.format("%.2f KB", kb) + else -> "$size B" + } + } + + fun toggleCheckboxesVisibility() { + showCheckboxes = !showCheckboxes + notifyDataSetChanged() // 刷新 RecyclerView + } + + fun getSelectedFiles(): List { + return selectedFiles + } +} \ No newline at end of file diff --git a/app/src/main/java/com/webtoonviewer/ui/adapter/ImageAdapter.kt b/app/src/main/java/com/webtoonviewer/ui/adapter/ImageAdapter.kt new file mode 100644 index 0000000..847803d --- /dev/null +++ b/app/src/main/java/com/webtoonviewer/ui/adapter/ImageAdapter.kt @@ -0,0 +1,48 @@ +package com.webtoonviewer.ui.adapter + +import android.graphics.Bitmap +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import androidx.recyclerview.widget.RecyclerView +import com.webtoonviewer.R + +class ImageAdapter( + private var images: MutableList, + private val onClick: () -> Unit, +) : RecyclerView.Adapter() { + + class ImageViewHolder(view: View) : RecyclerView.ViewHolder(view) { + val imageView: ImageView = view.findViewById(R.id.imageViewImageItem) + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ImageViewHolder { + val view = LayoutInflater.from(parent.context).inflate(R.layout.item_image, parent, false) + return ImageViewHolder(view) + } + + override fun onBindViewHolder(holder: ImageViewHolder, position: Int) { + holder.imageView.setImageBitmap(images[position]) + holder.itemView.setOnClickListener { + onClick() + } + } + + override fun getItemCount(): Int = images.size + + fun initImages() { + images.clear() + } + + fun addImage(bitmap: Bitmap) { + images.add(bitmap) + notifyItemInserted(images.size - 1) + } + + fun updateImages(bitmaps: List) { + initImages() + images.addAll(bitmaps) + notifyDataSetChanged() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/webtoonviewer/ui/adapter/TagAdapter.kt b/app/src/main/java/com/webtoonviewer/ui/adapter/TagAdapter.kt new file mode 100644 index 0000000..426e0c6 --- /dev/null +++ b/app/src/main/java/com/webtoonviewer/ui/adapter/TagAdapter.kt @@ -0,0 +1,46 @@ +package com.webtoonviewer.ui.adapter + +import android.util.Log +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.CheckBox +import androidx.recyclerview.widget.RecyclerView +import com.webtoonviewer.R +import com.webtoonviewer.ui.data.CheckboxItem +import kotlin.math.log + +class TagAdapter( + private val items: List, + private val onCheckedChangeListener: (position: Int, isChecked: Boolean) -> Unit +) : RecyclerView.Adapter() { + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MenuViewHolder { + val view = LayoutInflater.from(parent.context).inflate(R.layout.item_checkbox, parent, false) + return MenuViewHolder(view) + } + + override fun onBindViewHolder(holder: MenuViewHolder, position: Int) { + val item = items[position] + Log.d("ithi", "onBindViewHolder: $item") + holder.checkBox.isChecked = item.isChecked + holder.checkBox.text = item.text + + holder.checkBox.setOnCheckedChangeListener { _, isChecked -> + onCheckedChangeListener(position, isChecked) + } + } + + override fun getItemCount() = items.size + + class MenuViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val checkBox: CheckBox = itemView.findViewById(R.id.checkBoxDialogMainSettings) + } + + fun setItemsChecked() { + items.forEach { + it.isChecked = true + } + notifyDataSetChanged() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/webtoonviewer/ui/adapter/TitleAdapter.kt b/app/src/main/java/com/webtoonviewer/ui/adapter/TitleAdapter.kt new file mode 100644 index 0000000..3096e0a --- /dev/null +++ b/app/src/main/java/com/webtoonviewer/ui/adapter/TitleAdapter.kt @@ -0,0 +1,77 @@ +package com.webtoonviewer.ui.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.ViewGroup +import androidx.recyclerview.widget.RecyclerView +import com.webtoonviewer.R +import com.webtoonviewer.ui.data.TitleItem +import com.webtoonviewer.utils.CommonUtils.getEllipsizedText +import com.webtoonviewer.utils.CommonUtils.getShortNameFromEpisode +import com.webtoonviewer.utils.loadImgFromAssets + +class TitleAdapter( + private val context: Context, + private val titleItems: MutableList, + private val onItemClick: OnItemClickListener +) : RecyclerView.Adapter() { + + interface OnItemClickListener { + fun clickToEpisodeList(titleItem: TitleItem) + fun clickToSingleEpisode(titleItem: TitleItem) + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): TitleItemViewHolder { + val view = LayoutInflater.from(parent.context).inflate( + R.layout.item_title, + parent, + false + ) + return TitleItemViewHolder(view) + } + + override fun onBindViewHolder(holder: TitleItemViewHolder, position: Int) { + val titleItem = titleItems[position] + + val bitmap = loadImgFromAssets(context, titleItem.thumbnail) + if (bitmap != null) { + holder.thumbnail.setImageBitmap(bitmap) + } else { + holder.thumbnail.setImageResource(R.drawable.ic_launcher_background) + } + + holder.title.text = titleItem.title + holder.tag.text = titleItem.tag + val chapterTextView = holder.chapter + if (titleItem.chapter != "") { + chapterTextView.post{ + chapterTextView.text = getEllipsizedText(chapterTextView, "${getShortNameFromEpisode(titleItem.chapter)} >>") + } + } + + holder.thumbnail.setOnClickListener { + onItemClick.clickToEpisodeList(titleItem) + } + + holder.title.setOnClickListener { + onItemClick.clickToEpisodeList(titleItem) + } + + holder.tag.setOnClickListener { + onItemClick.clickToEpisodeList(titleItem) + } + + holder.chapter.setOnClickListener { + onItemClick.clickToSingleEpisode(titleItem) + } + } + + override fun getItemCount(): Int { + return titleItems.size + } + + fun updateItem(titleItem: TitleItem) { + val index = titleItems.indexOf(titleItem) + notifyItemChanged(index) + } +} diff --git a/app/src/main/java/com/webtoonviewer/ui/adapter/TitleItemViewHolder.kt b/app/src/main/java/com/webtoonviewer/ui/adapter/TitleItemViewHolder.kt new file mode 100644 index 0000000..84913b5 --- /dev/null +++ b/app/src/main/java/com/webtoonviewer/ui/adapter/TitleItemViewHolder.kt @@ -0,0 +1,14 @@ +package com.webtoonviewer.ui.adapter + +import android.view.View +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.webtoonviewer.R + +class TitleItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val thumbnail: ImageView = itemView.findViewById(R.id.imageViewTitlePageThumbnail) + val title: TextView = itemView.findViewById(R.id.textViewTitlePageTitle) + val tag: TextView = itemView.findViewById(R.id.textViewTitlePageTag) + val chapter: TextView = itemView.findViewById(R.id.textViewTitlePageChapter) +} diff --git a/app/src/main/java/com/webtoonviewer/ui/component/DownloadViewModel.kt b/app/src/main/java/com/webtoonviewer/ui/component/DownloadViewModel.kt new file mode 100644 index 0000000..756b215 --- /dev/null +++ b/app/src/main/java/com/webtoonviewer/ui/component/DownloadViewModel.kt @@ -0,0 +1,18 @@ +package com.webtoonviewer.ui.component + +import androidx.lifecycle.LiveData +import androidx.lifecycle.MutableLiveData +import androidx.lifecycle.ViewModel + +class DownloadViewModel : ViewModel() { + private val _isDownloading = MutableLiveData(false) + val isDownloading: LiveData get() = _isDownloading + + fun startDownload() { + _isDownloading.value = true + } + + fun finishDownload() { + _isDownloading.value = false + } +} \ No newline at end of file diff --git a/app/src/main/java/com/webtoonviewer/ui/component/SmoothScroller.kt b/app/src/main/java/com/webtoonviewer/ui/component/SmoothScroller.kt new file mode 100644 index 0000000..79dbcaa --- /dev/null +++ b/app/src/main/java/com/webtoonviewer/ui/component/SmoothScroller.kt @@ -0,0 +1,54 @@ +package com.webtoonviewer.ui.component + +import android.content.Context +import android.view.View +import androidx.recyclerview.widget.LinearSmoothScroller + +class SmoothScroller( + context: Context, + private val offset: Int, + private val speedFactor: String + ) : LinearSmoothScroller(context) { + + override fun calculateDxToMakeVisible(view: View, snapPreference: Int): Int { + val dx = super.calculateDxToMakeVisible(view, snapPreference) + return dx + offset // 添加偏移量 + } + + override fun calculateDyToMakeVisible(view: View, snapPreference: Int): Int { + val dy = super.calculateDyToMakeVisible(view, snapPreference) + return dy + offset // 添加偏移量 + } + + // 控制滚动速度 + override fun calculateSpeedPerPixel(displayMetrics: android.util.DisplayMetrics): Float { + return generateSpeed(speedFactor) / displayMetrics.densityDpi + } + + override fun getVerticalSnapPreference(): Int { + return SNAP_TO_START + } + + private fun generateSpeed(speedFactor: String):Float { + return when (speedFactor) { + "1x" -> { + 2000f + } + "2x" -> { + 1600f + } + "3x" -> { + 1200f + } + "4x" -> { + 800f + } + "5x" -> { + 400f + } + else -> { + 2000f + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/webtoonviewer/ui/data/CheckboxItem.kt b/app/src/main/java/com/webtoonviewer/ui/data/CheckboxItem.kt new file mode 100644 index 0000000..e7d6cd4 --- /dev/null +++ b/app/src/main/java/com/webtoonviewer/ui/data/CheckboxItem.kt @@ -0,0 +1,6 @@ +package com.webtoonviewer.ui.data + +data class CheckboxItem( + val text: String, + var isChecked: Boolean +) diff --git a/app/src/main/java/com/webtoonviewer/ui/data/FileItem.kt b/app/src/main/java/com/webtoonviewer/ui/data/FileItem.kt new file mode 100644 index 0000000..8b880e2 --- /dev/null +++ b/app/src/main/java/com/webtoonviewer/ui/data/FileItem.kt @@ -0,0 +1,7 @@ +package com.webtoonviewer.ui.data + +data class FileItem( + val name: String, + val isDirectory: Boolean, + val path: String +) diff --git a/app/src/main/java/com/webtoonviewer/ui/data/TitleItem.kt b/app/src/main/java/com/webtoonviewer/ui/data/TitleItem.kt new file mode 100644 index 0000000..a0c5f30 --- /dev/null +++ b/app/src/main/java/com/webtoonviewer/ui/data/TitleItem.kt @@ -0,0 +1,10 @@ +package com.webtoonviewer.ui.data + +data class TitleItem( + val thumbnail: String, + val title: String, + val tag: String, + var chapter: String, + var position: Int, + var offset: Int +) diff --git a/app/src/main/java/com/webtoonviewer/utils/CommonUtils.kt b/app/src/main/java/com/webtoonviewer/utils/CommonUtils.kt new file mode 100644 index 0000000..3ad5643 --- /dev/null +++ b/app/src/main/java/com/webtoonviewer/utils/CommonUtils.kt @@ -0,0 +1,78 @@ +package com.webtoonviewer.utils + +import android.text.TextUtils +import android.widget.TextView +import java.nio.file.Paths +import java.util.regex.Pattern + +object CommonUtils { + fun getEpisodeNameFromEpisode(episode: String): String { + val (_, name) = splitEpisode(episode) + return name + } + + fun getShortNameFromEpisode(episode: String): String { + val pattern = "第(\\d+)話" + val regex = Regex(pattern) + var name = getEpisodeNameFromEpisode(episode) + + if (regex.matches(name.split(" ")[0])) { + name = name.split(" ")[0] + } else if (name.split(" ").size > 1 && regex.matches(name.split(" ")[1])) { + name = name.split(" ")[1] + } else if (name.split(" ")[0].contains("Ep")) { + name = name.split(" ")[0] + name.split(" ")[name.split(" ").size - 1] + } else if (name.split(" ").size > 1) { + name = name.split(" ")[0] + } + return name + } + + fun getEpisodeIndexFromEpisode(episode: String): Int { + val (index, _) = splitEpisode(episode) + return index + } + + private fun splitEpisode(episode: String): Pair { + val matcher = Pattern.compile("(\\d+)\\.(.+)").matcher(episode) + var index = 0 + var name = "" + if (matcher.matches()) { + index = matcher.group(1)?.toInt() ?: 0 + name = matcher.group(2)?.toString() ?: "" + } + return Pair(index, name) + } + + fun pathJoin(vararg parts: String): String { + return Paths.get(parts[0], *parts.sliceArray(1 until parts.size)).toString() + } + + fun getEllipsizedText(textView: TextView, originalText: String): String { + val availableWidth = textView.width - textView.paddingLeft - textView.paddingRight + val textPaint = textView.paint + + if (availableWidth > textPaint.measureText(originalText)) { + return originalText + } else { + val parts = originalText.split(" ") + var maxLength = 0 + var maxIndex = -1 + for ((index, part) in parts.withIndex()) { + if (part.length > maxLength) { + maxIndex = index + maxLength = part.length + } + } + val restParts = parts.toMutableList() + restParts.removeAt(maxIndex) + + val ellipsizedText = TextUtils.ellipsize( + parts[maxIndex], textPaint, + (availableWidth - textPaint.measureText(restParts.joinToString(" "))), + TextUtils.TruncateAt.END).toString() + + return originalText.replace(parts[maxIndex], ellipsizedText) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/webtoonviewer/utils/ExternalStorageHelper.kt b/app/src/main/java/com/webtoonviewer/utils/ExternalStorageHelper.kt new file mode 100644 index 0000000..5606edf --- /dev/null +++ b/app/src/main/java/com/webtoonviewer/utils/ExternalStorageHelper.kt @@ -0,0 +1,92 @@ +package com.webtoonviewer.utils + +import android.graphics.Bitmap +import android.graphics.BitmapFactory +import android.os.Environment +import java.io.File +import java.io.FileInputStream + +class ExternalStorageHelper { + + private val baseDir = File(Environment.getExternalStorageDirectory(), "Webtoon") + private val baseTempDir = File(Environment.getExternalStorageDirectory(), "Temp_Webtoon") + + fun hasTempWebtoon(): Boolean { + return baseTempDir.exists() + } + + fun getAllWebtoonTitles(): MutableList { + return getAllWebtoonTitles(baseDir) + } + + fun getAllTempWebtoonTitles(): MutableList { + return getAllWebtoonTitles(baseTempDir) + } + + private fun getAllWebtoonTitles(dir: File): MutableList { + val titles = mutableListOf() + val items = dir.listFiles() + if (items != null) { + for (item in items) { + if (item.isDirectory) { + titles.add(item.name) + } + } + } + return titles + } + + fun getAllEpisodes(title: String): MutableList { + val webtoonDir = File(baseDir, title) + val episodes = mutableListOf() + val items = webtoonDir.listFiles() + if (items != null) { + for (item in items) { + if (item.isDirectory) { + episodes.add(item.name) + } + } + } + return episodes + } + + fun getImagePaths(title: String, episode: String): MutableList { + val episodeDir = File(baseDir, "$title/$episode") + val imagePaths = mutableListOf() + val items = episodeDir.listFiles() + val sum = items?.size ?: 0 + for (i in 1 until sum + 1) { + imagePaths.add(File(episodeDir,"$i.jpg")) + } + return imagePaths + } + + fun loadImage(imagePath: File): Bitmap? { + return if (imagePath.exists()) { + val inputStream = FileInputStream(imagePath) + val bytes = inputStream.readBytes() + inputStream.close() + BitmapFactory.decodeByteArray(bytes, 0, bytes.size) + } else null + } + + fun createEpisode(title: String, episode: String) { + val file = File(baseDir, "$title/$episode") + if (!file.exists()) { + file.mkdirs() + } + } + + fun episodeExists(title: String, episode: String): Boolean { + return File(baseDir, "$title/$episode").exists() + } + + fun generateOutputFile(imagePath: String): File? { + val parts = imagePath.split("/") + return if (parts.size > 1) { + val result = parts.drop(1).joinToString("/") + return File(baseDir, result) + } else null + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/webtoonviewer/utils/ExternalStoragePermission.kt b/app/src/main/java/com/webtoonviewer/utils/ExternalStoragePermission.kt new file mode 100644 index 0000000..95ee5b0 --- /dev/null +++ b/app/src/main/java/com/webtoonviewer/utils/ExternalStoragePermission.kt @@ -0,0 +1,28 @@ +package com.webtoonviewer.utils + +import android.content.Context +import android.content.Intent +import android.net.Uri +import android.os.Environment +import android.provider.Settings +import androidx.activity.result.ActivityResultLauncher + +class ExternalStoragePermission (private val context: Context){ + + fun hasManageExternalStoragePermission(): Boolean { + return Environment.isExternalStorageManager() + } + + fun requestManageExternalStoragePermission( + manageExternalStoragePermissionLauncher: ActivityResultLauncher + ) { + try { + val intent = Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION) + intent.data = Uri.parse("package:" + context.packageName) + manageExternalStoragePermissionLauncher.launch(intent) + } catch (ex: Exception) { + val intent = Intent(Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION) + manageExternalStoragePermissionLauncher.launch(intent) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/webtoonviewer/utils/SharedPreferencesHelper.kt b/app/src/main/java/com/webtoonviewer/utils/SharedPreferencesHelper.kt new file mode 100644 index 0000000..1b30801 --- /dev/null +++ b/app/src/main/java/com/webtoonviewer/utils/SharedPreferencesHelper.kt @@ -0,0 +1,67 @@ +package com.webtoonviewer.utils + +import android.content.Context +import android.util.Log +import java.io.File + +class SharedPreferencesHelper( + private val context: Context, + private val fileName: String +) { + + fun saveData(key: String, value: String) { + val sharedPreferences = context.getSharedPreferences(fileName, Context.MODE_PRIVATE) + val editor = sharedPreferences.edit() + editor.putString(key, value) + editor.apply() + } + + fun readData(key: String, defaultValue: String): String { + val sharedPreferences = context.getSharedPreferences(fileName, Context.MODE_PRIVATE) + return sharedPreferences.getString(key, defaultValue) ?: defaultValue + } + + fun putBoolean(key: String, value: Boolean) { + val sharedPreferences = context.getSharedPreferences(fileName, Context.MODE_PRIVATE) + val editor = sharedPreferences.edit() + editor.putBoolean(key, value) + editor.apply() + } + + fun getBoolean(key: String, defaultValue: Boolean): Boolean { + val sharedPreferences = context.getSharedPreferences(fileName, Context.MODE_PRIVATE) + return sharedPreferences.getBoolean(key, defaultValue) ?: defaultValue + } + + fun getAllSharedPreferences(): MutableList { + val sharedPreferences = context.getSharedPreferences(fileName, Context.MODE_PRIVATE) + val allEntries: Map = sharedPreferences.all + for ((key, value) in allEntries) { + Log.d("SharedPreferences", "$key: $value") + + } + return sharedPreferences.all.keys.toMutableList() + } + + fun removeSpecificSharedPreference(key: String) { + val sharedPreferences = context.getSharedPreferences(fileName, Context.MODE_PRIVATE) + val editor = sharedPreferences.edit() + editor.remove(key) + editor.apply() // or editor.commit() + } + + fun clearAllSharedPreferences() { + val sharedPreferences = context.getSharedPreferences(fileName, Context.MODE_PRIVATE) + val editor = sharedPreferences.edit() + editor.clear() + editor.apply() // or editor.commit() + } + + private fun deleteSharedPreferencesFile(fileName: String) { + val dir = context.filesDir.parentFile + val sharedPrefsFile = File(dir, "shared_prefs/$fileName.xml") + if (sharedPrefsFile.exists()) { + sharedPrefsFile.delete() + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/webtoonviewer/utils/StatusBar.kt b/app/src/main/java/com/webtoonviewer/utils/StatusBar.kt new file mode 100644 index 0000000..061229a --- /dev/null +++ b/app/src/main/java/com/webtoonviewer/utils/StatusBar.kt @@ -0,0 +1,18 @@ +package com.webtoonviewer.utils + +import android.app.Activity +import android.view.WindowInsetsController +import androidx.core.content.ContextCompat +import com.webtoonviewer.R + +object StatusBar { + + fun darkStatusBar(activity: Activity) { + val window = activity.window + window.statusBarColor = ContextCompat.getColor(activity, R.color.dark_gray) + window.insetsController?.setSystemBarsAppearance( + 0, WindowInsetsController.APPEARANCE_LIGHT_STATUS_BARS + ) + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/webtoonviewer/utils/Thumbnails.kt b/app/src/main/java/com/webtoonviewer/utils/Thumbnails.kt new file mode 100644 index 0000000..27d3102 --- /dev/null +++ b/app/src/main/java/com/webtoonviewer/utils/Thumbnails.kt @@ -0,0 +1,18 @@ +package com.webtoonviewer.utils + +import android.content.Context +import android.graphics.Bitmap +import android.graphics.BitmapFactory +import java.io.IOException + +fun loadImgFromAssets(context: Context, fileName: String): Bitmap? { + val assetManager = context.assets + var bitmap: Bitmap? = null + try { + val inputStream = assetManager.open(fileName) + bitmap = BitmapFactory.decodeStream(inputStream) + } catch (e: IOException) { + e.printStackTrace() + } + return bitmap +} \ No newline at end of file diff --git a/app/src/main/java/com/webtoonviewer/utils/Webtoon18Plus.kt b/app/src/main/java/com/webtoonviewer/utils/Webtoon18Plus.kt new file mode 100644 index 0000000..6c90784 --- /dev/null +++ b/app/src/main/java/com/webtoonviewer/utils/Webtoon18Plus.kt @@ -0,0 +1,7 @@ +package com.webtoonviewer.utils + +object Webtoon18Plus { + val WEBTOON18PLUS = arrayOf( + "婚姻這門生意[18+]" + ) +} \ No newline at end of file diff --git a/app/src/main/java/com/webtoonviewer/work/UpdateBooks.kt b/app/src/main/java/com/webtoonviewer/work/UpdateBooks.kt new file mode 100644 index 0000000..cbf313c --- /dev/null +++ b/app/src/main/java/com/webtoonviewer/work/UpdateBooks.kt @@ -0,0 +1,224 @@ +package com.webtoonviewer.work + +import android.content.Context +import android.util.Log +import androidx.work.CoroutineWorker +import androidx.work.WorkerParameters +import com.google.gson.Gson +import com.webtoonviewer.db.Book +import com.webtoonviewer.repository.BookInformation +import com.webtoonviewer.network.SmbClientHelper +import com.webtoonviewer.repository.BookRepository +import com.webtoonviewer.storage.StorageManager +import com.webtoonviewer.utils.SharedPreferencesHelper +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.withContext +import java.io.BufferedReader +import java.io.InputStreamReader + +class UpdateBooks(context: Context, workerParams: WorkerParameters) : + CoroutineWorker(context, workerParams) { + private val smbClientHelper: SmbClientHelper = SmbClientHelper(context) + private val bookRepository: BookRepository = BookRepository(context) + private val bookIdPreferences: SharedPreferencesHelper = SharedPreferencesHelper(context, "book_id") + + private var isConnected = false + + override suspend fun doWork(): Result { + val context = applicationContext + + //bookRepository.setAutoIncrement(40) + + updateIsLocal(context) + + try { + isConnected = smbClientHelper.connect() + if (isConnected) { + val webtoonsShouldDeleted: MutableList = bookRepository.getAllBookTitles() + val newWebtoons: MutableList = mutableListOf() + + + for (item in smbClientHelper.getTitlesFromShare()) { + if (item.fileName != "." && item.fileName != "..") { + + val title = item.fileName + val book = bookRepository.getBookByTitle(title) + + if (book != null) { + val id = bookIdPreferences.readData(book.title, "0").toInt() + if (id != book.id) { + bookIdPreferences.saveData(book.title, book.id.toString()) + } + webtoonsShouldDeleted.remove(title) + updateChapters(book) + updateTag(book) + } else { // newBook + newWebtoons.add(title) + } + } + } + for (webtoonTitle in webtoonsShouldDeleted) { + val bookId = bookIdPreferences.readData(webtoonTitle, "0").toInt() + if (bookRepository.getBookById(bookId)?.title == webtoonTitle) { + bookRepository.deleteBookById(bookId) + } else { + Log.d("UpdateBook", "Error webtoonsShouldDeleted: $bookId") + } + } + + val missingIds = missingIds() + + for (webtoonTitle in newWebtoons) { + var webtoonId = bookRepository.getAllBookTitles().size + 1 + if (missingIds.size > 0) { + webtoonId = missingIds[0] + missingIds.removeAt(0) + + } + addNewBook(webtoonTitle, webtoonId) + val book = bookRepository.getBookByTitle(webtoonTitle) + if (book != null) { + bookIdPreferences.saveData(webtoonTitle, book.id.toString()) + updateChapters(book) + } + } + + synchronizeBooks(context) + } + } catch (e: Exception) { + Log.e("SMB", "Error accessing SMB share", e) + } finally { + if (isConnected) { + smbClientHelper.disconnect() + } + } + return Result.success() + } + + private suspend fun addNewBook(title: String, id: Int) { + val informationFile = smbClientHelper.getInformationFile(title) + + informationFile.use { smbFile -> + val reader = BufferedReader(InputStreamReader(smbFile.inputStream)) + val content = reader.use { it.readText() } + val gson = Gson() + val information = gson.fromJson(content, BookInformation::class.java) + bookRepository.addNewBook(Book( + id, + title, + information.author, + information.description, + information.tag, + information.thumbnail_name, + 0)) + } + } + + private suspend fun updateTag(book: Book) { + val informationFile = smbClientHelper.getInformationFile(book.title) + + informationFile.use { smbFile -> + val reader = BufferedReader(InputStreamReader(smbFile.inputStream)) + val content = reader.use { it.readText() } + val gson = Gson() + val informationFromFile = gson.fromJson(content, BookInformation::class.java) + val tag = informationFromFile.tag + if (tag != book.tag) { + val information = BookInformation(book.title, book.author, tag, book.description, book.img) + bookRepository.updateInformationById(book.id, information) + } + } + } + + private suspend fun updateChapters(book: Book) { + val count = smbClientHelper.getChapterSumFromShare(book.title) + val dbChapterSum = book.chapterSum + if (count != dbChapterSum) { + var chapters = mutableListOf() + for (itemT in smbClientHelper.getEpisodesFormShare(book.title)) { + if (itemT.fileName != "." && itemT.fileName != ".." && + !itemT.fileName.contains("information") + ) { // item is chapter + chapters.add(itemT.fileName) + } + } + chapters = chapters.sortedBy { it.substringBefore('.').toInt() } + .toCollection(ArrayList()) + bookRepository.updateChaptersById(book.id, chapters, chapters.size) + } + } + + private suspend fun synchronizeBooks(context: Context) { + val localTitles = StorageManager.getAllWebtoonTitles(context) + for (title in localTitles) { + val book = bookRepository.getBookByTitle(title) + if (book != null) { + smbClientHelper.downloadWebtoon(book.title) + } + } + } + + private suspend fun updateIsLocal(context: Context) { + val dbBooks = bookRepository.getAllBooks() + val localTitles = StorageManager.getAllWebtoonTitles(context) + for (i in 0 until dbBooks.size) { + if (localTitles.contains(dbBooks[i].title)) { + bookRepository.updateIsLocal(dbBooks[i].id, 1) + } else { + bookRepository.updateIsLocal(dbBooks[i].id, 0) + } + } + } + + private suspend fun replaceBook(replacedBook: Book, title: String) { + bookIdPreferences.removeSpecificSharedPreference(replacedBook.title) + val bookId = replacedBook.id + bookRepository.updateTitleById(bookId, title) + bookRepository.updateChaptersById(bookId, mutableListOf(), 0) + bookRepository.updateBookmarkById(bookId, "", 0, 0) + + var isConnected = false + try { + isConnected = smbClientHelper.connect() + if (isConnected) { + val informationFile = smbClientHelper.getInformationFile(title) + + informationFile.use { smbFile -> + val reader = BufferedReader(InputStreamReader(smbFile.inputStream)) + val content = reader.use { it.readText() } + val gson = Gson() + val information = gson.fromJson(content, BookInformation::class.java) + bookRepository.updateInformationById(bookId, information) + } + } + + } finally { + if (isConnected) { + smbClientHelper.disconnect() + } + } + + bookIdPreferences.saveData(title, bookId.toString()) + } + + private suspend fun missingIds(): MutableList { + val existingIds: MutableList = mutableListOf() + val missingIds: MutableList = mutableListOf() + + for (book in bookRepository.getAllBooks()) { + existingIds.add(book.id) + } + + val maxId = existingIds.maxOrNull() + if (maxId != null) { + for (i in 1..maxId) { + if (!existingIds.contains(i)) { + missingIds.add(i) + } + } + } + return missingIds + } +} + + diff --git a/app/src/main/res/drawable-hdpi/arrow_18.png b/app/src/main/res/drawable-hdpi/arrow_18.png new file mode 100644 index 0000000..cea6b3a Binary files /dev/null and b/app/src/main/res/drawable-hdpi/arrow_18.png differ diff --git a/app/src/main/res/drawable-hdpi/arrow_20.png b/app/src/main/res/drawable-hdpi/arrow_20.png new file mode 100644 index 0000000..92b3787 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/arrow_20.png differ diff --git a/app/src/main/res/drawable-hdpi/arrow_24.png b/app/src/main/res/drawable-hdpi/arrow_24.png new file mode 100644 index 0000000..70536a6 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/arrow_24.png differ diff --git a/app/src/main/res/drawable-hdpi/arrow_36.png b/app/src/main/res/drawable-hdpi/arrow_36.png new file mode 100644 index 0000000..5f85e0c Binary files /dev/null and b/app/src/main/res/drawable-hdpi/arrow_36.png differ diff --git a/app/src/main/res/drawable-hdpi/arrow_48.png b/app/src/main/res/drawable-hdpi/arrow_48.png new file mode 100644 index 0000000..6d5b3cd Binary files /dev/null and b/app/src/main/res/drawable-hdpi/arrow_48.png differ diff --git a/app/src/main/res/drawable-hdpi/brightness_18.png b/app/src/main/res/drawable-hdpi/brightness_18.png new file mode 100644 index 0000000..b09b8e6 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/brightness_18.png differ diff --git a/app/src/main/res/drawable-hdpi/brightness_20.png b/app/src/main/res/drawable-hdpi/brightness_20.png new file mode 100644 index 0000000..d463e84 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/brightness_20.png differ diff --git a/app/src/main/res/drawable-hdpi/brightness_24.png b/app/src/main/res/drawable-hdpi/brightness_24.png new file mode 100644 index 0000000..86fc60d Binary files /dev/null and b/app/src/main/res/drawable-hdpi/brightness_24.png differ diff --git a/app/src/main/res/drawable-hdpi/brightness_36.png b/app/src/main/res/drawable-hdpi/brightness_36.png new file mode 100644 index 0000000..4e40f76 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/brightness_36.png differ diff --git a/app/src/main/res/drawable-hdpi/brightness_48.png b/app/src/main/res/drawable-hdpi/brightness_48.png new file mode 100644 index 0000000..09b3289 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/brightness_48.png differ diff --git a/app/src/main/res/drawable-hdpi/cross_18.png b/app/src/main/res/drawable-hdpi/cross_18.png new file mode 100644 index 0000000..e264876 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/cross_18.png differ diff --git a/app/src/main/res/drawable-hdpi/cross_20.png b/app/src/main/res/drawable-hdpi/cross_20.png new file mode 100644 index 0000000..fb688f7 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/cross_20.png differ diff --git a/app/src/main/res/drawable-hdpi/cross_24.png b/app/src/main/res/drawable-hdpi/cross_24.png new file mode 100644 index 0000000..1210959 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/cross_24.png differ diff --git a/app/src/main/res/drawable-hdpi/cross_36.png b/app/src/main/res/drawable-hdpi/cross_36.png new file mode 100644 index 0000000..4bbd373 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/cross_36.png differ diff --git a/app/src/main/res/drawable-hdpi/cross_48.png b/app/src/main/res/drawable-hdpi/cross_48.png new file mode 100644 index 0000000..899238f Binary files /dev/null and b/app/src/main/res/drawable-hdpi/cross_48.png differ diff --git a/app/src/main/res/drawable-hdpi/document_18.png b/app/src/main/res/drawable-hdpi/document_18.png new file mode 100644 index 0000000..1f838e4 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/document_18.png differ diff --git a/app/src/main/res/drawable-hdpi/document_20.png b/app/src/main/res/drawable-hdpi/document_20.png new file mode 100644 index 0000000..98e97a5 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/document_20.png differ diff --git a/app/src/main/res/drawable-hdpi/document_24.png b/app/src/main/res/drawable-hdpi/document_24.png new file mode 100644 index 0000000..9ba3396 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/document_24.png differ diff --git a/app/src/main/res/drawable-hdpi/document_36.png b/app/src/main/res/drawable-hdpi/document_36.png new file mode 100644 index 0000000..f52e7a1 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/document_36.png differ diff --git a/app/src/main/res/drawable-hdpi/document_48.png b/app/src/main/res/drawable-hdpi/document_48.png new file mode 100644 index 0000000..f1afdc1 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/document_48.png differ diff --git a/app/src/main/res/drawable-hdpi/download_18.png b/app/src/main/res/drawable-hdpi/download_18.png new file mode 100644 index 0000000..1ed32b5 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/download_18.png differ diff --git a/app/src/main/res/drawable-hdpi/download_20.png b/app/src/main/res/drawable-hdpi/download_20.png new file mode 100644 index 0000000..1437f58 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/download_20.png differ diff --git a/app/src/main/res/drawable-hdpi/download_24.png b/app/src/main/res/drawable-hdpi/download_24.png new file mode 100644 index 0000000..2f3b85d Binary files /dev/null and b/app/src/main/res/drawable-hdpi/download_24.png differ diff --git a/app/src/main/res/drawable-hdpi/download_36.png b/app/src/main/res/drawable-hdpi/download_36.png new file mode 100644 index 0000000..c749ec3 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/download_36.png differ diff --git a/app/src/main/res/drawable-hdpi/download_48.png b/app/src/main/res/drawable-hdpi/download_48.png new file mode 100644 index 0000000..4d59100 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/download_48.png differ diff --git a/app/src/main/res/drawable-hdpi/eighteen_18.png b/app/src/main/res/drawable-hdpi/eighteen_18.png new file mode 100644 index 0000000..79a041d Binary files /dev/null and b/app/src/main/res/drawable-hdpi/eighteen_18.png differ diff --git a/app/src/main/res/drawable-hdpi/eighteen_20.png b/app/src/main/res/drawable-hdpi/eighteen_20.png new file mode 100644 index 0000000..5e7786a Binary files /dev/null and b/app/src/main/res/drawable-hdpi/eighteen_20.png differ diff --git a/app/src/main/res/drawable-hdpi/eighteen_24.png b/app/src/main/res/drawable-hdpi/eighteen_24.png new file mode 100644 index 0000000..fe6c284 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/eighteen_24.png differ diff --git a/app/src/main/res/drawable-hdpi/eighteen_36.png b/app/src/main/res/drawable-hdpi/eighteen_36.png new file mode 100644 index 0000000..637046b Binary files /dev/null and b/app/src/main/res/drawable-hdpi/eighteen_36.png differ diff --git a/app/src/main/res/drawable-hdpi/eighteen_48.png b/app/src/main/res/drawable-hdpi/eighteen_48.png new file mode 100644 index 0000000..1a2ecbb Binary files /dev/null and b/app/src/main/res/drawable-hdpi/eighteen_48.png differ diff --git a/app/src/main/res/drawable-hdpi/folder_18.png b/app/src/main/res/drawable-hdpi/folder_18.png new file mode 100644 index 0000000..1b335a2 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/folder_18.png differ diff --git a/app/src/main/res/drawable-hdpi/folder_20.png b/app/src/main/res/drawable-hdpi/folder_20.png new file mode 100644 index 0000000..541df13 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/folder_20.png differ diff --git a/app/src/main/res/drawable-hdpi/folder_24.png b/app/src/main/res/drawable-hdpi/folder_24.png new file mode 100644 index 0000000..ceaec38 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/folder_24.png differ diff --git a/app/src/main/res/drawable-hdpi/folder_36.png b/app/src/main/res/drawable-hdpi/folder_36.png new file mode 100644 index 0000000..84f4252 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/folder_36.png differ diff --git a/app/src/main/res/drawable-hdpi/folder_48.png b/app/src/main/res/drawable-hdpi/folder_48.png new file mode 100644 index 0000000..565dbce Binary files /dev/null and b/app/src/main/res/drawable-hdpi/folder_48.png differ diff --git a/app/src/main/res/drawable-hdpi/home_18.png b/app/src/main/res/drawable-hdpi/home_18.png new file mode 100644 index 0000000..74e1747 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/home_18.png differ diff --git a/app/src/main/res/drawable-hdpi/home_20.png b/app/src/main/res/drawable-hdpi/home_20.png new file mode 100644 index 0000000..efca8d5 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/home_20.png differ diff --git a/app/src/main/res/drawable-hdpi/home_24.png b/app/src/main/res/drawable-hdpi/home_24.png new file mode 100644 index 0000000..1dd0103 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/home_24.png differ diff --git a/app/src/main/res/drawable-hdpi/home_36.png b/app/src/main/res/drawable-hdpi/home_36.png new file mode 100644 index 0000000..103576a Binary files /dev/null and b/app/src/main/res/drawable-hdpi/home_36.png differ diff --git a/app/src/main/res/drawable-hdpi/home_48.png b/app/src/main/res/drawable-hdpi/home_48.png new file mode 100644 index 0000000..1035f1d Binary files /dev/null and b/app/src/main/res/drawable-hdpi/home_48.png differ diff --git a/app/src/main/res/drawable-hdpi/info_18.png b/app/src/main/res/drawable-hdpi/info_18.png new file mode 100644 index 0000000..b728a7e Binary files /dev/null and b/app/src/main/res/drawable-hdpi/info_18.png differ diff --git a/app/src/main/res/drawable-hdpi/info_20.png b/app/src/main/res/drawable-hdpi/info_20.png new file mode 100644 index 0000000..15d89f5 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/info_20.png differ diff --git a/app/src/main/res/drawable-hdpi/info_24.png b/app/src/main/res/drawable-hdpi/info_24.png new file mode 100644 index 0000000..d1eaed8 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/info_24.png differ diff --git a/app/src/main/res/drawable-hdpi/info_36.png b/app/src/main/res/drawable-hdpi/info_36.png new file mode 100644 index 0000000..4bee780 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/info_36.png differ diff --git a/app/src/main/res/drawable-hdpi/info_48.png b/app/src/main/res/drawable-hdpi/info_48.png new file mode 100644 index 0000000..4446bdd Binary files /dev/null and b/app/src/main/res/drawable-hdpi/info_48.png differ diff --git a/app/src/main/res/drawable-hdpi/left_18.png b/app/src/main/res/drawable-hdpi/left_18.png new file mode 100644 index 0000000..8ed7503 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/left_18.png differ diff --git a/app/src/main/res/drawable-hdpi/left_20.png b/app/src/main/res/drawable-hdpi/left_20.png new file mode 100644 index 0000000..800465b Binary files /dev/null and b/app/src/main/res/drawable-hdpi/left_20.png differ diff --git a/app/src/main/res/drawable-hdpi/left_24.png b/app/src/main/res/drawable-hdpi/left_24.png new file mode 100644 index 0000000..b402eae Binary files /dev/null and b/app/src/main/res/drawable-hdpi/left_24.png differ diff --git a/app/src/main/res/drawable-hdpi/left_36.png b/app/src/main/res/drawable-hdpi/left_36.png new file mode 100644 index 0000000..c91d8df Binary files /dev/null and b/app/src/main/res/drawable-hdpi/left_36.png differ diff --git a/app/src/main/res/drawable-hdpi/left_48.png b/app/src/main/res/drawable-hdpi/left_48.png new file mode 100644 index 0000000..08de0f6 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/left_48.png differ diff --git a/app/src/main/res/drawable-hdpi/list_18.png b/app/src/main/res/drawable-hdpi/list_18.png new file mode 100644 index 0000000..9b61e3f Binary files /dev/null and b/app/src/main/res/drawable-hdpi/list_18.png differ diff --git a/app/src/main/res/drawable-hdpi/list_20.png b/app/src/main/res/drawable-hdpi/list_20.png new file mode 100644 index 0000000..37783d2 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/list_20.png differ diff --git a/app/src/main/res/drawable-hdpi/list_24.png b/app/src/main/res/drawable-hdpi/list_24.png new file mode 100644 index 0000000..3198799 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/list_24.png differ diff --git a/app/src/main/res/drawable-hdpi/list_36.png b/app/src/main/res/drawable-hdpi/list_36.png new file mode 100644 index 0000000..aaad814 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/list_36.png differ diff --git a/app/src/main/res/drawable-hdpi/list_48.png b/app/src/main/res/drawable-hdpi/list_48.png new file mode 100644 index 0000000..3585168 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/list_48.png differ diff --git a/app/src/main/res/drawable-hdpi/menu_18.png b/app/src/main/res/drawable-hdpi/menu_18.png new file mode 100644 index 0000000..e2eace0 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/menu_18.png differ diff --git a/app/src/main/res/drawable-hdpi/menu_20.png b/app/src/main/res/drawable-hdpi/menu_20.png new file mode 100644 index 0000000..f8b91a7 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/menu_20.png differ diff --git a/app/src/main/res/drawable-hdpi/menu_24.png b/app/src/main/res/drawable-hdpi/menu_24.png new file mode 100644 index 0000000..3a827b0 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/menu_24.png differ diff --git a/app/src/main/res/drawable-hdpi/menu_36.png b/app/src/main/res/drawable-hdpi/menu_36.png new file mode 100644 index 0000000..2b08447 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/menu_36.png differ diff --git a/app/src/main/res/drawable-hdpi/menu_48.png b/app/src/main/res/drawable-hdpi/menu_48.png new file mode 100644 index 0000000..63bea6a Binary files /dev/null and b/app/src/main/res/drawable-hdpi/menu_48.png differ diff --git a/app/src/main/res/drawable-hdpi/moon_18.png b/app/src/main/res/drawable-hdpi/moon_18.png new file mode 100644 index 0000000..69386c4 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/moon_18.png differ diff --git a/app/src/main/res/drawable-hdpi/moon_20.png b/app/src/main/res/drawable-hdpi/moon_20.png new file mode 100644 index 0000000..5db8917 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/moon_20.png differ diff --git a/app/src/main/res/drawable-hdpi/moon_24.png b/app/src/main/res/drawable-hdpi/moon_24.png new file mode 100644 index 0000000..46abeee Binary files /dev/null and b/app/src/main/res/drawable-hdpi/moon_24.png differ diff --git a/app/src/main/res/drawable-hdpi/moon_36.png b/app/src/main/res/drawable-hdpi/moon_36.png new file mode 100644 index 0000000..5df3cc6 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/moon_36.png differ diff --git a/app/src/main/res/drawable-hdpi/moon_48.png b/app/src/main/res/drawable-hdpi/moon_48.png new file mode 100644 index 0000000..0375953 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/moon_48.png differ diff --git a/app/src/main/res/drawable-hdpi/play_18.png b/app/src/main/res/drawable-hdpi/play_18.png new file mode 100644 index 0000000..dd72139 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/play_18.png differ diff --git a/app/src/main/res/drawable-hdpi/play_20.png b/app/src/main/res/drawable-hdpi/play_20.png new file mode 100644 index 0000000..d1640c8 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/play_20.png differ diff --git a/app/src/main/res/drawable-hdpi/play_24.png b/app/src/main/res/drawable-hdpi/play_24.png new file mode 100644 index 0000000..b97b7ff Binary files /dev/null and b/app/src/main/res/drawable-hdpi/play_24.png differ diff --git a/app/src/main/res/drawable-hdpi/play_36.png b/app/src/main/res/drawable-hdpi/play_36.png new file mode 100644 index 0000000..c4f547b Binary files /dev/null and b/app/src/main/res/drawable-hdpi/play_36.png differ diff --git a/app/src/main/res/drawable-hdpi/play_48.png b/app/src/main/res/drawable-hdpi/play_48.png new file mode 100644 index 0000000..95bcbef Binary files /dev/null and b/app/src/main/res/drawable-hdpi/play_48.png differ diff --git a/app/src/main/res/drawable-hdpi/right_18.png b/app/src/main/res/drawable-hdpi/right_18.png new file mode 100644 index 0000000..7f2c9c7 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/right_18.png differ diff --git a/app/src/main/res/drawable-hdpi/right_20.png b/app/src/main/res/drawable-hdpi/right_20.png new file mode 100644 index 0000000..82a961a Binary files /dev/null and b/app/src/main/res/drawable-hdpi/right_20.png differ diff --git a/app/src/main/res/drawable-hdpi/right_24.png b/app/src/main/res/drawable-hdpi/right_24.png new file mode 100644 index 0000000..d9fd8c2 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/right_24.png differ diff --git a/app/src/main/res/drawable-hdpi/right_36.png b/app/src/main/res/drawable-hdpi/right_36.png new file mode 100644 index 0000000..6e8c6ed Binary files /dev/null and b/app/src/main/res/drawable-hdpi/right_36.png differ diff --git a/app/src/main/res/drawable-hdpi/right_48.png b/app/src/main/res/drawable-hdpi/right_48.png new file mode 100644 index 0000000..c80a113 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/right_48.png differ diff --git a/app/src/main/res/drawable-hdpi/settings_18.png b/app/src/main/res/drawable-hdpi/settings_18.png new file mode 100644 index 0000000..aae8849 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/settings_18.png differ diff --git a/app/src/main/res/drawable-hdpi/settings_20.png b/app/src/main/res/drawable-hdpi/settings_20.png new file mode 100644 index 0000000..3bf7e7d Binary files /dev/null and b/app/src/main/res/drawable-hdpi/settings_20.png differ diff --git a/app/src/main/res/drawable-hdpi/settings_24.png b/app/src/main/res/drawable-hdpi/settings_24.png new file mode 100644 index 0000000..b6d80bd Binary files /dev/null and b/app/src/main/res/drawable-hdpi/settings_24.png differ diff --git a/app/src/main/res/drawable-hdpi/settings_36.png b/app/src/main/res/drawable-hdpi/settings_36.png new file mode 100644 index 0000000..53aefc7 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/settings_36.png differ diff --git a/app/src/main/res/drawable-hdpi/settings_48.png b/app/src/main/res/drawable-hdpi/settings_48.png new file mode 100644 index 0000000..c879a5b Binary files /dev/null and b/app/src/main/res/drawable-hdpi/settings_48.png differ diff --git a/app/src/main/res/drawable-hdpi/submit_18.png b/app/src/main/res/drawable-hdpi/submit_18.png new file mode 100644 index 0000000..d11d7f5 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/submit_18.png differ diff --git a/app/src/main/res/drawable-hdpi/submit_20.png b/app/src/main/res/drawable-hdpi/submit_20.png new file mode 100644 index 0000000..deadfad Binary files /dev/null and b/app/src/main/res/drawable-hdpi/submit_20.png differ diff --git a/app/src/main/res/drawable-hdpi/submit_24.png b/app/src/main/res/drawable-hdpi/submit_24.png new file mode 100644 index 0000000..bb42e75 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/submit_24.png differ diff --git a/app/src/main/res/drawable-hdpi/submit_36.png b/app/src/main/res/drawable-hdpi/submit_36.png new file mode 100644 index 0000000..35589fc Binary files /dev/null and b/app/src/main/res/drawable-hdpi/submit_36.png differ diff --git a/app/src/main/res/drawable-hdpi/submit_48.png b/app/src/main/res/drawable-hdpi/submit_48.png new file mode 100644 index 0000000..d3871ca Binary files /dev/null and b/app/src/main/res/drawable-hdpi/submit_48.png differ diff --git a/app/src/main/res/drawable-hdpi/trash_18.png b/app/src/main/res/drawable-hdpi/trash_18.png new file mode 100644 index 0000000..546bc77 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/trash_18.png differ diff --git a/app/src/main/res/drawable-hdpi/trash_20.png b/app/src/main/res/drawable-hdpi/trash_20.png new file mode 100644 index 0000000..750cd02 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/trash_20.png differ diff --git a/app/src/main/res/drawable-hdpi/trash_24.png b/app/src/main/res/drawable-hdpi/trash_24.png new file mode 100644 index 0000000..2d5ae73 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/trash_24.png differ diff --git a/app/src/main/res/drawable-hdpi/trash_36.png b/app/src/main/res/drawable-hdpi/trash_36.png new file mode 100644 index 0000000..86f177e Binary files /dev/null and b/app/src/main/res/drawable-hdpi/trash_36.png differ diff --git a/app/src/main/res/drawable-hdpi/trash_48.png b/app/src/main/res/drawable-hdpi/trash_48.png new file mode 100644 index 0000000..76dd114 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/trash_48.png differ diff --git a/app/src/main/res/drawable-hdpi/up_18.png b/app/src/main/res/drawable-hdpi/up_18.png new file mode 100644 index 0000000..55a73cf Binary files /dev/null and b/app/src/main/res/drawable-hdpi/up_18.png differ diff --git a/app/src/main/res/drawable-hdpi/up_20.png b/app/src/main/res/drawable-hdpi/up_20.png new file mode 100644 index 0000000..637ce0b Binary files /dev/null and b/app/src/main/res/drawable-hdpi/up_20.png differ diff --git a/app/src/main/res/drawable-hdpi/up_24.png b/app/src/main/res/drawable-hdpi/up_24.png new file mode 100644 index 0000000..98c5d7f Binary files /dev/null and b/app/src/main/res/drawable-hdpi/up_24.png differ diff --git a/app/src/main/res/drawable-hdpi/up_36.png b/app/src/main/res/drawable-hdpi/up_36.png new file mode 100644 index 0000000..9f366e1 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/up_36.png differ diff --git a/app/src/main/res/drawable-hdpi/up_48.png b/app/src/main/res/drawable-hdpi/up_48.png new file mode 100644 index 0000000..ef727c3 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/up_48.png differ diff --git a/app/src/main/res/drawable-mdpi/arrow_18.png b/app/src/main/res/drawable-mdpi/arrow_18.png new file mode 100644 index 0000000..ca8bd6a Binary files /dev/null and b/app/src/main/res/drawable-mdpi/arrow_18.png differ diff --git a/app/src/main/res/drawable-mdpi/arrow_20.png b/app/src/main/res/drawable-mdpi/arrow_20.png new file mode 100644 index 0000000..c1e64dd Binary files /dev/null and b/app/src/main/res/drawable-mdpi/arrow_20.png differ diff --git a/app/src/main/res/drawable-mdpi/arrow_24.png b/app/src/main/res/drawable-mdpi/arrow_24.png new file mode 100644 index 0000000..0b77451 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/arrow_24.png differ diff --git a/app/src/main/res/drawable-mdpi/arrow_36.png b/app/src/main/res/drawable-mdpi/arrow_36.png new file mode 100644 index 0000000..70536a6 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/arrow_36.png differ diff --git a/app/src/main/res/drawable-mdpi/arrow_48.png b/app/src/main/res/drawable-mdpi/arrow_48.png new file mode 100644 index 0000000..559c25a Binary files /dev/null and b/app/src/main/res/drawable-mdpi/arrow_48.png differ diff --git a/app/src/main/res/drawable-mdpi/brightness_18.png b/app/src/main/res/drawable-mdpi/brightness_18.png new file mode 100644 index 0000000..cc08dec Binary files /dev/null and b/app/src/main/res/drawable-mdpi/brightness_18.png differ diff --git a/app/src/main/res/drawable-mdpi/brightness_20.png b/app/src/main/res/drawable-mdpi/brightness_20.png new file mode 100644 index 0000000..6ec7eb1 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/brightness_20.png differ diff --git a/app/src/main/res/drawable-mdpi/brightness_24.png b/app/src/main/res/drawable-mdpi/brightness_24.png new file mode 100644 index 0000000..189a9aa Binary files /dev/null and b/app/src/main/res/drawable-mdpi/brightness_24.png differ diff --git a/app/src/main/res/drawable-mdpi/brightness_36.png b/app/src/main/res/drawable-mdpi/brightness_36.png new file mode 100644 index 0000000..86fc60d Binary files /dev/null and b/app/src/main/res/drawable-mdpi/brightness_36.png differ diff --git a/app/src/main/res/drawable-mdpi/brightness_48.png b/app/src/main/res/drawable-mdpi/brightness_48.png new file mode 100644 index 0000000..77dc2ec Binary files /dev/null and b/app/src/main/res/drawable-mdpi/brightness_48.png differ diff --git a/app/src/main/res/drawable-mdpi/cross_18.png b/app/src/main/res/drawable-mdpi/cross_18.png new file mode 100644 index 0000000..fae3c0b Binary files /dev/null and b/app/src/main/res/drawable-mdpi/cross_18.png differ diff --git a/app/src/main/res/drawable-mdpi/cross_20.png b/app/src/main/res/drawable-mdpi/cross_20.png new file mode 100644 index 0000000..c77f3dc Binary files /dev/null and b/app/src/main/res/drawable-mdpi/cross_20.png differ diff --git a/app/src/main/res/drawable-mdpi/cross_24.png b/app/src/main/res/drawable-mdpi/cross_24.png new file mode 100644 index 0000000..5f16dc7 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/cross_24.png differ diff --git a/app/src/main/res/drawable-mdpi/cross_36.png b/app/src/main/res/drawable-mdpi/cross_36.png new file mode 100644 index 0000000..1210959 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/cross_36.png differ diff --git a/app/src/main/res/drawable-mdpi/cross_48.png b/app/src/main/res/drawable-mdpi/cross_48.png new file mode 100644 index 0000000..0b75062 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/cross_48.png differ diff --git a/app/src/main/res/drawable-mdpi/document_18.png b/app/src/main/res/drawable-mdpi/document_18.png new file mode 100644 index 0000000..9068cb7 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/document_18.png differ diff --git a/app/src/main/res/drawable-mdpi/document_20.png b/app/src/main/res/drawable-mdpi/document_20.png new file mode 100644 index 0000000..e7051b6 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/document_20.png differ diff --git a/app/src/main/res/drawable-mdpi/document_24.png b/app/src/main/res/drawable-mdpi/document_24.png new file mode 100644 index 0000000..6f998c7 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/document_24.png differ diff --git a/app/src/main/res/drawable-mdpi/document_36.png b/app/src/main/res/drawable-mdpi/document_36.png new file mode 100644 index 0000000..7dd223e Binary files /dev/null and b/app/src/main/res/drawable-mdpi/document_36.png differ diff --git a/app/src/main/res/drawable-mdpi/document_48.png b/app/src/main/res/drawable-mdpi/document_48.png new file mode 100644 index 0000000..09291d5 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/document_48.png differ diff --git a/app/src/main/res/drawable-mdpi/download_18.png b/app/src/main/res/drawable-mdpi/download_18.png new file mode 100644 index 0000000..22bd262 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/download_18.png differ diff --git a/app/src/main/res/drawable-mdpi/download_20.png b/app/src/main/res/drawable-mdpi/download_20.png new file mode 100644 index 0000000..525b293 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/download_20.png differ diff --git a/app/src/main/res/drawable-mdpi/download_24.png b/app/src/main/res/drawable-mdpi/download_24.png new file mode 100644 index 0000000..f04f13b Binary files /dev/null and b/app/src/main/res/drawable-mdpi/download_24.png differ diff --git a/app/src/main/res/drawable-mdpi/download_36.png b/app/src/main/res/drawable-mdpi/download_36.png new file mode 100644 index 0000000..dc53127 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/download_36.png differ diff --git a/app/src/main/res/drawable-mdpi/download_48.png b/app/src/main/res/drawable-mdpi/download_48.png new file mode 100644 index 0000000..10e7740 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/download_48.png differ diff --git a/app/src/main/res/drawable-mdpi/eighteen_18.png b/app/src/main/res/drawable-mdpi/eighteen_18.png new file mode 100644 index 0000000..503d5d1 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/eighteen_18.png differ diff --git a/app/src/main/res/drawable-mdpi/eighteen_20.png b/app/src/main/res/drawable-mdpi/eighteen_20.png new file mode 100644 index 0000000..323535a Binary files /dev/null and b/app/src/main/res/drawable-mdpi/eighteen_20.png differ diff --git a/app/src/main/res/drawable-mdpi/eighteen_24.png b/app/src/main/res/drawable-mdpi/eighteen_24.png new file mode 100644 index 0000000..eebfc23 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/eighteen_24.png differ diff --git a/app/src/main/res/drawable-mdpi/eighteen_36.png b/app/src/main/res/drawable-mdpi/eighteen_36.png new file mode 100644 index 0000000..ed6cb27 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/eighteen_36.png differ diff --git a/app/src/main/res/drawable-mdpi/eighteen_48.png b/app/src/main/res/drawable-mdpi/eighteen_48.png new file mode 100644 index 0000000..bbc3ee7 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/eighteen_48.png differ diff --git a/app/src/main/res/drawable-mdpi/folder_18.png b/app/src/main/res/drawable-mdpi/folder_18.png new file mode 100644 index 0000000..ed278ab Binary files /dev/null and b/app/src/main/res/drawable-mdpi/folder_18.png differ diff --git a/app/src/main/res/drawable-mdpi/folder_20.png b/app/src/main/res/drawable-mdpi/folder_20.png new file mode 100644 index 0000000..8e29cb1 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/folder_20.png differ diff --git a/app/src/main/res/drawable-mdpi/folder_24.png b/app/src/main/res/drawable-mdpi/folder_24.png new file mode 100644 index 0000000..d800949 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/folder_24.png differ diff --git a/app/src/main/res/drawable-mdpi/folder_36.png b/app/src/main/res/drawable-mdpi/folder_36.png new file mode 100644 index 0000000..2de9487 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/folder_36.png differ diff --git a/app/src/main/res/drawable-mdpi/folder_48.png b/app/src/main/res/drawable-mdpi/folder_48.png new file mode 100644 index 0000000..88ff733 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/folder_48.png differ diff --git a/app/src/main/res/drawable-mdpi/home_18.png b/app/src/main/res/drawable-mdpi/home_18.png new file mode 100644 index 0000000..31c65c4 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/home_18.png differ diff --git a/app/src/main/res/drawable-mdpi/home_20.png b/app/src/main/res/drawable-mdpi/home_20.png new file mode 100644 index 0000000..a9925de Binary files /dev/null and b/app/src/main/res/drawable-mdpi/home_20.png differ diff --git a/app/src/main/res/drawable-mdpi/home_24.png b/app/src/main/res/drawable-mdpi/home_24.png new file mode 100644 index 0000000..14a3ee2 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/home_24.png differ diff --git a/app/src/main/res/drawable-mdpi/home_36.png b/app/src/main/res/drawable-mdpi/home_36.png new file mode 100644 index 0000000..1dd0103 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/home_36.png differ diff --git a/app/src/main/res/drawable-mdpi/home_48.png b/app/src/main/res/drawable-mdpi/home_48.png new file mode 100644 index 0000000..175a3f2 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/home_48.png differ diff --git a/app/src/main/res/drawable-mdpi/info_18.png b/app/src/main/res/drawable-mdpi/info_18.png new file mode 100644 index 0000000..0794c76 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/info_18.png differ diff --git a/app/src/main/res/drawable-mdpi/info_20.png b/app/src/main/res/drawable-mdpi/info_20.png new file mode 100644 index 0000000..d8e48ba Binary files /dev/null and b/app/src/main/res/drawable-mdpi/info_20.png differ diff --git a/app/src/main/res/drawable-mdpi/info_24.png b/app/src/main/res/drawable-mdpi/info_24.png new file mode 100644 index 0000000..04c24bf Binary files /dev/null and b/app/src/main/res/drawable-mdpi/info_24.png differ diff --git a/app/src/main/res/drawable-mdpi/info_36.png b/app/src/main/res/drawable-mdpi/info_36.png new file mode 100644 index 0000000..d1eaed8 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/info_36.png differ diff --git a/app/src/main/res/drawable-mdpi/info_48.png b/app/src/main/res/drawable-mdpi/info_48.png new file mode 100644 index 0000000..037f34a Binary files /dev/null and b/app/src/main/res/drawable-mdpi/info_48.png differ diff --git a/app/src/main/res/drawable-mdpi/left_18.png b/app/src/main/res/drawable-mdpi/left_18.png new file mode 100644 index 0000000..ab2074b Binary files /dev/null and b/app/src/main/res/drawable-mdpi/left_18.png differ diff --git a/app/src/main/res/drawable-mdpi/left_20.png b/app/src/main/res/drawable-mdpi/left_20.png new file mode 100644 index 0000000..274b293 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/left_20.png differ diff --git a/app/src/main/res/drawable-mdpi/left_24.png b/app/src/main/res/drawable-mdpi/left_24.png new file mode 100644 index 0000000..4a6dd87 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/left_24.png differ diff --git a/app/src/main/res/drawable-mdpi/left_36.png b/app/src/main/res/drawable-mdpi/left_36.png new file mode 100644 index 0000000..b402eae Binary files /dev/null and b/app/src/main/res/drawable-mdpi/left_36.png differ diff --git a/app/src/main/res/drawable-mdpi/left_48.png b/app/src/main/res/drawable-mdpi/left_48.png new file mode 100644 index 0000000..65850ce Binary files /dev/null and b/app/src/main/res/drawable-mdpi/left_48.png differ diff --git a/app/src/main/res/drawable-mdpi/list_18.png b/app/src/main/res/drawable-mdpi/list_18.png new file mode 100644 index 0000000..2105c75 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/list_18.png differ diff --git a/app/src/main/res/drawable-mdpi/list_20.png b/app/src/main/res/drawable-mdpi/list_20.png new file mode 100644 index 0000000..0671e6d Binary files /dev/null and b/app/src/main/res/drawable-mdpi/list_20.png differ diff --git a/app/src/main/res/drawable-mdpi/list_24.png b/app/src/main/res/drawable-mdpi/list_24.png new file mode 100644 index 0000000..52b35aa Binary files /dev/null and b/app/src/main/res/drawable-mdpi/list_24.png differ diff --git a/app/src/main/res/drawable-mdpi/list_36.png b/app/src/main/res/drawable-mdpi/list_36.png new file mode 100644 index 0000000..3198799 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/list_36.png differ diff --git a/app/src/main/res/drawable-mdpi/list_48.png b/app/src/main/res/drawable-mdpi/list_48.png new file mode 100644 index 0000000..11702fb Binary files /dev/null and b/app/src/main/res/drawable-mdpi/list_48.png differ diff --git a/app/src/main/res/drawable-mdpi/menu_18.png b/app/src/main/res/drawable-mdpi/menu_18.png new file mode 100644 index 0000000..1e8aa3c Binary files /dev/null and b/app/src/main/res/drawable-mdpi/menu_18.png differ diff --git a/app/src/main/res/drawable-mdpi/menu_20.png b/app/src/main/res/drawable-mdpi/menu_20.png new file mode 100644 index 0000000..9169d81 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/menu_20.png differ diff --git a/app/src/main/res/drawable-mdpi/menu_24.png b/app/src/main/res/drawable-mdpi/menu_24.png new file mode 100644 index 0000000..05c11bc Binary files /dev/null and b/app/src/main/res/drawable-mdpi/menu_24.png differ diff --git a/app/src/main/res/drawable-mdpi/menu_36.png b/app/src/main/res/drawable-mdpi/menu_36.png new file mode 100644 index 0000000..b05431a Binary files /dev/null and b/app/src/main/res/drawable-mdpi/menu_36.png differ diff --git a/app/src/main/res/drawable-mdpi/menu_48.png b/app/src/main/res/drawable-mdpi/menu_48.png new file mode 100644 index 0000000..cc011fa Binary files /dev/null and b/app/src/main/res/drawable-mdpi/menu_48.png differ diff --git a/app/src/main/res/drawable-mdpi/moon_18.png b/app/src/main/res/drawable-mdpi/moon_18.png new file mode 100644 index 0000000..91bc4c3 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/moon_18.png differ diff --git a/app/src/main/res/drawable-mdpi/moon_20.png b/app/src/main/res/drawable-mdpi/moon_20.png new file mode 100644 index 0000000..3506191 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/moon_20.png differ diff --git a/app/src/main/res/drawable-mdpi/moon_24.png b/app/src/main/res/drawable-mdpi/moon_24.png new file mode 100644 index 0000000..86a7d03 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/moon_24.png differ diff --git a/app/src/main/res/drawable-mdpi/moon_36.png b/app/src/main/res/drawable-mdpi/moon_36.png new file mode 100644 index 0000000..3581799 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/moon_36.png differ diff --git a/app/src/main/res/drawable-mdpi/moon_48.png b/app/src/main/res/drawable-mdpi/moon_48.png new file mode 100644 index 0000000..66331ea Binary files /dev/null and b/app/src/main/res/drawable-mdpi/moon_48.png differ diff --git a/app/src/main/res/drawable-mdpi/play_18.png b/app/src/main/res/drawable-mdpi/play_18.png new file mode 100644 index 0000000..752101a Binary files /dev/null and b/app/src/main/res/drawable-mdpi/play_18.png differ diff --git a/app/src/main/res/drawable-mdpi/play_20.png b/app/src/main/res/drawable-mdpi/play_20.png new file mode 100644 index 0000000..515566f Binary files /dev/null and b/app/src/main/res/drawable-mdpi/play_20.png differ diff --git a/app/src/main/res/drawable-mdpi/play_24.png b/app/src/main/res/drawable-mdpi/play_24.png new file mode 100644 index 0000000..56f4d36 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/play_24.png differ diff --git a/app/src/main/res/drawable-mdpi/play_36.png b/app/src/main/res/drawable-mdpi/play_36.png new file mode 100644 index 0000000..b4bf0ad Binary files /dev/null and b/app/src/main/res/drawable-mdpi/play_36.png differ diff --git a/app/src/main/res/drawable-mdpi/play_48.png b/app/src/main/res/drawable-mdpi/play_48.png new file mode 100644 index 0000000..02540dc Binary files /dev/null and b/app/src/main/res/drawable-mdpi/play_48.png differ diff --git a/app/src/main/res/drawable-mdpi/right_18.png b/app/src/main/res/drawable-mdpi/right_18.png new file mode 100644 index 0000000..a34fe25 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/right_18.png differ diff --git a/app/src/main/res/drawable-mdpi/right_20.png b/app/src/main/res/drawable-mdpi/right_20.png new file mode 100644 index 0000000..945c485 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/right_20.png differ diff --git a/app/src/main/res/drawable-mdpi/right_24.png b/app/src/main/res/drawable-mdpi/right_24.png new file mode 100644 index 0000000..45fdf49 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/right_24.png differ diff --git a/app/src/main/res/drawable-mdpi/right_36.png b/app/src/main/res/drawable-mdpi/right_36.png new file mode 100644 index 0000000..d9fd8c2 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/right_36.png differ diff --git a/app/src/main/res/drawable-mdpi/right_48.png b/app/src/main/res/drawable-mdpi/right_48.png new file mode 100644 index 0000000..6659263 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/right_48.png differ diff --git a/app/src/main/res/drawable-mdpi/settings_18.png b/app/src/main/res/drawable-mdpi/settings_18.png new file mode 100644 index 0000000..9d3d5be Binary files /dev/null and b/app/src/main/res/drawable-mdpi/settings_18.png differ diff --git a/app/src/main/res/drawable-mdpi/settings_20.png b/app/src/main/res/drawable-mdpi/settings_20.png new file mode 100644 index 0000000..b3bc468 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/settings_20.png differ diff --git a/app/src/main/res/drawable-mdpi/settings_24.png b/app/src/main/res/drawable-mdpi/settings_24.png new file mode 100644 index 0000000..4d862f3 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/settings_24.png differ diff --git a/app/src/main/res/drawable-mdpi/settings_36.png b/app/src/main/res/drawable-mdpi/settings_36.png new file mode 100644 index 0000000..549fe71 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/settings_36.png differ diff --git a/app/src/main/res/drawable-mdpi/settings_48.png b/app/src/main/res/drawable-mdpi/settings_48.png new file mode 100644 index 0000000..919909b Binary files /dev/null and b/app/src/main/res/drawable-mdpi/settings_48.png differ diff --git a/app/src/main/res/drawable-mdpi/submit_18.png b/app/src/main/res/drawable-mdpi/submit_18.png new file mode 100644 index 0000000..769b5ce Binary files /dev/null and b/app/src/main/res/drawable-mdpi/submit_18.png differ diff --git a/app/src/main/res/drawable-mdpi/submit_20.png b/app/src/main/res/drawable-mdpi/submit_20.png new file mode 100644 index 0000000..45b15e4 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/submit_20.png differ diff --git a/app/src/main/res/drawable-mdpi/submit_24.png b/app/src/main/res/drawable-mdpi/submit_24.png new file mode 100644 index 0000000..374bc52 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/submit_24.png differ diff --git a/app/src/main/res/drawable-mdpi/submit_36.png b/app/src/main/res/drawable-mdpi/submit_36.png new file mode 100644 index 0000000..bb42e75 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/submit_36.png differ diff --git a/app/src/main/res/drawable-mdpi/submit_48.png b/app/src/main/res/drawable-mdpi/submit_48.png new file mode 100644 index 0000000..945faf1 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/submit_48.png differ diff --git a/app/src/main/res/drawable-mdpi/trash_18.png b/app/src/main/res/drawable-mdpi/trash_18.png new file mode 100644 index 0000000..7fcadb5 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/trash_18.png differ diff --git a/app/src/main/res/drawable-mdpi/trash_20.png b/app/src/main/res/drawable-mdpi/trash_20.png new file mode 100644 index 0000000..19887a0 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/trash_20.png differ diff --git a/app/src/main/res/drawable-mdpi/trash_24.png b/app/src/main/res/drawable-mdpi/trash_24.png new file mode 100644 index 0000000..1996722 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/trash_24.png differ diff --git a/app/src/main/res/drawable-mdpi/trash_36.png b/app/src/main/res/drawable-mdpi/trash_36.png new file mode 100644 index 0000000..5068899 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/trash_36.png differ diff --git a/app/src/main/res/drawable-mdpi/trash_48.png b/app/src/main/res/drawable-mdpi/trash_48.png new file mode 100644 index 0000000..7aef61b Binary files /dev/null and b/app/src/main/res/drawable-mdpi/trash_48.png differ diff --git a/app/src/main/res/drawable-mdpi/up_18.png b/app/src/main/res/drawable-mdpi/up_18.png new file mode 100644 index 0000000..cf943cf Binary files /dev/null and b/app/src/main/res/drawable-mdpi/up_18.png differ diff --git a/app/src/main/res/drawable-mdpi/up_20.png b/app/src/main/res/drawable-mdpi/up_20.png new file mode 100644 index 0000000..3e4a068 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/up_20.png differ diff --git a/app/src/main/res/drawable-mdpi/up_24.png b/app/src/main/res/drawable-mdpi/up_24.png new file mode 100644 index 0000000..05914cf Binary files /dev/null and b/app/src/main/res/drawable-mdpi/up_24.png differ diff --git a/app/src/main/res/drawable-mdpi/up_36.png b/app/src/main/res/drawable-mdpi/up_36.png new file mode 100644 index 0000000..98c5d7f Binary files /dev/null and b/app/src/main/res/drawable-mdpi/up_36.png differ diff --git a/app/src/main/res/drawable-mdpi/up_48.png b/app/src/main/res/drawable-mdpi/up_48.png new file mode 100644 index 0000000..76f8a9b Binary files /dev/null and b/app/src/main/res/drawable-mdpi/up_48.png differ diff --git a/app/src/main/res/drawable-xhdpi/arrow_18.png b/app/src/main/res/drawable-xhdpi/arrow_18.png new file mode 100644 index 0000000..cda6b65 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/arrow_18.png differ diff --git a/app/src/main/res/drawable-xhdpi/arrow_20.png b/app/src/main/res/drawable-xhdpi/arrow_20.png new file mode 100644 index 0000000..513de30 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/arrow_20.png differ diff --git a/app/src/main/res/drawable-xhdpi/arrow_24.png b/app/src/main/res/drawable-xhdpi/arrow_24.png new file mode 100644 index 0000000..5013740 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/arrow_24.png differ diff --git a/app/src/main/res/drawable-xhdpi/arrow_36.png b/app/src/main/res/drawable-xhdpi/arrow_36.png new file mode 100644 index 0000000..6d5b3cd Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/arrow_36.png differ diff --git a/app/src/main/res/drawable-xhdpi/arrow_48.png b/app/src/main/res/drawable-xhdpi/arrow_48.png new file mode 100644 index 0000000..8490e58 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/arrow_48.png differ diff --git a/app/src/main/res/drawable-xhdpi/brightness_18.png b/app/src/main/res/drawable-xhdpi/brightness_18.png new file mode 100644 index 0000000..e835d21 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/brightness_18.png differ diff --git a/app/src/main/res/drawable-xhdpi/brightness_20.png b/app/src/main/res/drawable-xhdpi/brightness_20.png new file mode 100644 index 0000000..17c9ecb Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/brightness_20.png differ diff --git a/app/src/main/res/drawable-xhdpi/brightness_24.png b/app/src/main/res/drawable-xhdpi/brightness_24.png new file mode 100644 index 0000000..3c75bb9 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/brightness_24.png differ diff --git a/app/src/main/res/drawable-xhdpi/brightness_36.png b/app/src/main/res/drawable-xhdpi/brightness_36.png new file mode 100644 index 0000000..736e8bf Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/brightness_36.png differ diff --git a/app/src/main/res/drawable-xhdpi/brightness_48.png b/app/src/main/res/drawable-xhdpi/brightness_48.png new file mode 100644 index 0000000..d2f2116 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/brightness_48.png differ diff --git a/app/src/main/res/drawable-xhdpi/cross_18.png b/app/src/main/res/drawable-xhdpi/cross_18.png new file mode 100644 index 0000000..1210959 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/cross_18.png differ diff --git a/app/src/main/res/drawable-xhdpi/cross_20.png b/app/src/main/res/drawable-xhdpi/cross_20.png new file mode 100644 index 0000000..662a162 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/cross_20.png differ diff --git a/app/src/main/res/drawable-xhdpi/cross_24.png b/app/src/main/res/drawable-xhdpi/cross_24.png new file mode 100644 index 0000000..0b75062 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/cross_24.png differ diff --git a/app/src/main/res/drawable-xhdpi/cross_36.png b/app/src/main/res/drawable-xhdpi/cross_36.png new file mode 100644 index 0000000..899238f Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/cross_36.png differ diff --git a/app/src/main/res/drawable-xhdpi/cross_48.png b/app/src/main/res/drawable-xhdpi/cross_48.png new file mode 100644 index 0000000..526c5de Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/cross_48.png differ diff --git a/app/src/main/res/drawable-xhdpi/document_18.png b/app/src/main/res/drawable-xhdpi/document_18.png new file mode 100644 index 0000000..cf0105a Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/document_18.png differ diff --git a/app/src/main/res/drawable-xhdpi/document_20.png b/app/src/main/res/drawable-xhdpi/document_20.png new file mode 100644 index 0000000..1a0c3b3 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/document_20.png differ diff --git a/app/src/main/res/drawable-xhdpi/document_24.png b/app/src/main/res/drawable-xhdpi/document_24.png new file mode 100644 index 0000000..14c89ad Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/document_24.png differ diff --git a/app/src/main/res/drawable-xhdpi/document_36.png b/app/src/main/res/drawable-xhdpi/document_36.png new file mode 100644 index 0000000..83776b9 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/document_36.png differ diff --git a/app/src/main/res/drawable-xhdpi/document_48.png b/app/src/main/res/drawable-xhdpi/document_48.png new file mode 100644 index 0000000..cf1f2e6 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/document_48.png differ diff --git a/app/src/main/res/drawable-xhdpi/download_18.png b/app/src/main/res/drawable-xhdpi/download_18.png new file mode 100644 index 0000000..2f3b85d Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/download_18.png differ diff --git a/app/src/main/res/drawable-xhdpi/download_20.png b/app/src/main/res/drawable-xhdpi/download_20.png new file mode 100644 index 0000000..b548308 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/download_20.png differ diff --git a/app/src/main/res/drawable-xhdpi/download_24.png b/app/src/main/res/drawable-xhdpi/download_24.png new file mode 100644 index 0000000..72bffa1 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/download_24.png differ diff --git a/app/src/main/res/drawable-xhdpi/download_36.png b/app/src/main/res/drawable-xhdpi/download_36.png new file mode 100644 index 0000000..4d59100 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/download_36.png differ diff --git a/app/src/main/res/drawable-xhdpi/download_48.png b/app/src/main/res/drawable-xhdpi/download_48.png new file mode 100644 index 0000000..7f09083 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/download_48.png differ diff --git a/app/src/main/res/drawable-xhdpi/eighteen_18.png b/app/src/main/res/drawable-xhdpi/eighteen_18.png new file mode 100644 index 0000000..eeb488e Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/eighteen_18.png differ diff --git a/app/src/main/res/drawable-xhdpi/eighteen_20.png b/app/src/main/res/drawable-xhdpi/eighteen_20.png new file mode 100644 index 0000000..0cc0fc1 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/eighteen_20.png differ diff --git a/app/src/main/res/drawable-xhdpi/eighteen_24.png b/app/src/main/res/drawable-xhdpi/eighteen_24.png new file mode 100644 index 0000000..33bd991 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/eighteen_24.png differ diff --git a/app/src/main/res/drawable-xhdpi/eighteen_36.png b/app/src/main/res/drawable-xhdpi/eighteen_36.png new file mode 100644 index 0000000..1a2ecbb Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/eighteen_36.png differ diff --git a/app/src/main/res/drawable-xhdpi/eighteen_48.png b/app/src/main/res/drawable-xhdpi/eighteen_48.png new file mode 100644 index 0000000..b1c6582 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/eighteen_48.png differ diff --git a/app/src/main/res/drawable-xhdpi/folder_18.png b/app/src/main/res/drawable-xhdpi/folder_18.png new file mode 100644 index 0000000..773e5ec Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/folder_18.png differ diff --git a/app/src/main/res/drawable-xhdpi/folder_20.png b/app/src/main/res/drawable-xhdpi/folder_20.png new file mode 100644 index 0000000..7ead656 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/folder_20.png differ diff --git a/app/src/main/res/drawable-xhdpi/folder_24.png b/app/src/main/res/drawable-xhdpi/folder_24.png new file mode 100644 index 0000000..8edae60 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/folder_24.png differ diff --git a/app/src/main/res/drawable-xhdpi/folder_36.png b/app/src/main/res/drawable-xhdpi/folder_36.png new file mode 100644 index 0000000..6221328 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/folder_36.png differ diff --git a/app/src/main/res/drawable-xhdpi/folder_48.png b/app/src/main/res/drawable-xhdpi/folder_48.png new file mode 100644 index 0000000..046c30e Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/folder_48.png differ diff --git a/app/src/main/res/drawable-xhdpi/home_18.png b/app/src/main/res/drawable-xhdpi/home_18.png new file mode 100644 index 0000000..1dd0103 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/home_18.png differ diff --git a/app/src/main/res/drawable-xhdpi/home_20.png b/app/src/main/res/drawable-xhdpi/home_20.png new file mode 100644 index 0000000..a947c02 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/home_20.png differ diff --git a/app/src/main/res/drawable-xhdpi/home_24.png b/app/src/main/res/drawable-xhdpi/home_24.png new file mode 100644 index 0000000..175a3f2 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/home_24.png differ diff --git a/app/src/main/res/drawable-xhdpi/home_36.png b/app/src/main/res/drawable-xhdpi/home_36.png new file mode 100644 index 0000000..1035f1d Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/home_36.png differ diff --git a/app/src/main/res/drawable-xhdpi/home_48.png b/app/src/main/res/drawable-xhdpi/home_48.png new file mode 100644 index 0000000..3777727 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/home_48.png differ diff --git a/app/src/main/res/drawable-xhdpi/info_18.png b/app/src/main/res/drawable-xhdpi/info_18.png new file mode 100644 index 0000000..d1eaed8 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/info_18.png differ diff --git a/app/src/main/res/drawable-xhdpi/info_20.png b/app/src/main/res/drawable-xhdpi/info_20.png new file mode 100644 index 0000000..3496645 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/info_20.png differ diff --git a/app/src/main/res/drawable-xhdpi/info_24.png b/app/src/main/res/drawable-xhdpi/info_24.png new file mode 100644 index 0000000..037f34a Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/info_24.png differ diff --git a/app/src/main/res/drawable-xhdpi/info_36.png b/app/src/main/res/drawable-xhdpi/info_36.png new file mode 100644 index 0000000..4446bdd Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/info_36.png differ diff --git a/app/src/main/res/drawable-xhdpi/info_48.png b/app/src/main/res/drawable-xhdpi/info_48.png new file mode 100644 index 0000000..a14ccfe Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/info_48.png differ diff --git a/app/src/main/res/drawable-xhdpi/left_18.png b/app/src/main/res/drawable-xhdpi/left_18.png new file mode 100644 index 0000000..b402eae Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/left_18.png differ diff --git a/app/src/main/res/drawable-xhdpi/left_20.png b/app/src/main/res/drawable-xhdpi/left_20.png new file mode 100644 index 0000000..0674b38 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/left_20.png differ diff --git a/app/src/main/res/drawable-xhdpi/left_24.png b/app/src/main/res/drawable-xhdpi/left_24.png new file mode 100644 index 0000000..65850ce Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/left_24.png differ diff --git a/app/src/main/res/drawable-xhdpi/left_36.png b/app/src/main/res/drawable-xhdpi/left_36.png new file mode 100644 index 0000000..08de0f6 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/left_36.png differ diff --git a/app/src/main/res/drawable-xhdpi/left_48.png b/app/src/main/res/drawable-xhdpi/left_48.png new file mode 100644 index 0000000..fdc8503 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/left_48.png differ diff --git a/app/src/main/res/drawable-xhdpi/list_18.png b/app/src/main/res/drawable-xhdpi/list_18.png new file mode 100644 index 0000000..3198799 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/list_18.png differ diff --git a/app/src/main/res/drawable-xhdpi/list_20.png b/app/src/main/res/drawable-xhdpi/list_20.png new file mode 100644 index 0000000..bee0fae Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/list_20.png differ diff --git a/app/src/main/res/drawable-xhdpi/list_24.png b/app/src/main/res/drawable-xhdpi/list_24.png new file mode 100644 index 0000000..11702fb Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/list_24.png differ diff --git a/app/src/main/res/drawable-xhdpi/list_36.png b/app/src/main/res/drawable-xhdpi/list_36.png new file mode 100644 index 0000000..3585168 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/list_36.png differ diff --git a/app/src/main/res/drawable-xhdpi/list_48.png b/app/src/main/res/drawable-xhdpi/list_48.png new file mode 100644 index 0000000..473388e Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/list_48.png differ diff --git a/app/src/main/res/drawable-xhdpi/menu_18.png b/app/src/main/res/drawable-xhdpi/menu_18.png new file mode 100644 index 0000000..3a827b0 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/menu_18.png differ diff --git a/app/src/main/res/drawable-xhdpi/menu_20.png b/app/src/main/res/drawable-xhdpi/menu_20.png new file mode 100644 index 0000000..9745fe1 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/menu_20.png differ diff --git a/app/src/main/res/drawable-xhdpi/menu_24.png b/app/src/main/res/drawable-xhdpi/menu_24.png new file mode 100644 index 0000000..736a815 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/menu_24.png differ diff --git a/app/src/main/res/drawable-xhdpi/menu_36.png b/app/src/main/res/drawable-xhdpi/menu_36.png new file mode 100644 index 0000000..458927c Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/menu_36.png differ diff --git a/app/src/main/res/drawable-xhdpi/menu_48.png b/app/src/main/res/drawable-xhdpi/menu_48.png new file mode 100644 index 0000000..5ebd43f Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/menu_48.png differ diff --git a/app/src/main/res/drawable-xhdpi/moon_18.png b/app/src/main/res/drawable-xhdpi/moon_18.png new file mode 100644 index 0000000..22dfabb Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/moon_18.png differ diff --git a/app/src/main/res/drawable-xhdpi/moon_20.png b/app/src/main/res/drawable-xhdpi/moon_20.png new file mode 100644 index 0000000..4f54175 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/moon_20.png differ diff --git a/app/src/main/res/drawable-xhdpi/moon_24.png b/app/src/main/res/drawable-xhdpi/moon_24.png new file mode 100644 index 0000000..3b3ff54 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/moon_24.png differ diff --git a/app/src/main/res/drawable-xhdpi/moon_36.png b/app/src/main/res/drawable-xhdpi/moon_36.png new file mode 100644 index 0000000..6cd2a7c Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/moon_36.png differ diff --git a/app/src/main/res/drawable-xhdpi/moon_48.png b/app/src/main/res/drawable-xhdpi/moon_48.png new file mode 100644 index 0000000..d6e521b Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/moon_48.png differ diff --git a/app/src/main/res/drawable-xhdpi/play_18.png b/app/src/main/res/drawable-xhdpi/play_18.png new file mode 100644 index 0000000..6676218 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/play_18.png differ diff --git a/app/src/main/res/drawable-xhdpi/play_20.png b/app/src/main/res/drawable-xhdpi/play_20.png new file mode 100644 index 0000000..7569f2e Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/play_20.png differ diff --git a/app/src/main/res/drawable-xhdpi/play_24.png b/app/src/main/res/drawable-xhdpi/play_24.png new file mode 100644 index 0000000..8c59560 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/play_24.png differ diff --git a/app/src/main/res/drawable-xhdpi/play_36.png b/app/src/main/res/drawable-xhdpi/play_36.png new file mode 100644 index 0000000..f04d03e Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/play_36.png differ diff --git a/app/src/main/res/drawable-xhdpi/play_48.png b/app/src/main/res/drawable-xhdpi/play_48.png new file mode 100644 index 0000000..3d58ccd Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/play_48.png differ diff --git a/app/src/main/res/drawable-xhdpi/right_18.png b/app/src/main/res/drawable-xhdpi/right_18.png new file mode 100644 index 0000000..d9fd8c2 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/right_18.png differ diff --git a/app/src/main/res/drawable-xhdpi/right_20.png b/app/src/main/res/drawable-xhdpi/right_20.png new file mode 100644 index 0000000..e563043 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/right_20.png differ diff --git a/app/src/main/res/drawable-xhdpi/right_24.png b/app/src/main/res/drawable-xhdpi/right_24.png new file mode 100644 index 0000000..6659263 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/right_24.png differ diff --git a/app/src/main/res/drawable-xhdpi/right_36.png b/app/src/main/res/drawable-xhdpi/right_36.png new file mode 100644 index 0000000..c80a113 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/right_36.png differ diff --git a/app/src/main/res/drawable-xhdpi/right_48.png b/app/src/main/res/drawable-xhdpi/right_48.png new file mode 100644 index 0000000..51b08c9 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/right_48.png differ diff --git a/app/src/main/res/drawable-xhdpi/settings_18.png b/app/src/main/res/drawable-xhdpi/settings_18.png new file mode 100644 index 0000000..b6d80bd Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/settings_18.png differ diff --git a/app/src/main/res/drawable-xhdpi/settings_20.png b/app/src/main/res/drawable-xhdpi/settings_20.png new file mode 100644 index 0000000..f88217e Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/settings_20.png differ diff --git a/app/src/main/res/drawable-xhdpi/settings_24.png b/app/src/main/res/drawable-xhdpi/settings_24.png new file mode 100644 index 0000000..f662e3c Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/settings_24.png differ diff --git a/app/src/main/res/drawable-xhdpi/settings_36.png b/app/src/main/res/drawable-xhdpi/settings_36.png new file mode 100644 index 0000000..e1cb7f1 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/settings_36.png differ diff --git a/app/src/main/res/drawable-xhdpi/settings_48.png b/app/src/main/res/drawable-xhdpi/settings_48.png new file mode 100644 index 0000000..c8b8231 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/settings_48.png differ diff --git a/app/src/main/res/drawable-xhdpi/submit_18.png b/app/src/main/res/drawable-xhdpi/submit_18.png new file mode 100644 index 0000000..bb42e75 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/submit_18.png differ diff --git a/app/src/main/res/drawable-xhdpi/submit_20.png b/app/src/main/res/drawable-xhdpi/submit_20.png new file mode 100644 index 0000000..057caaf Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/submit_20.png differ diff --git a/app/src/main/res/drawable-xhdpi/submit_24.png b/app/src/main/res/drawable-xhdpi/submit_24.png new file mode 100644 index 0000000..945faf1 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/submit_24.png differ diff --git a/app/src/main/res/drawable-xhdpi/submit_36.png b/app/src/main/res/drawable-xhdpi/submit_36.png new file mode 100644 index 0000000..d3871ca Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/submit_36.png differ diff --git a/app/src/main/res/drawable-xhdpi/submit_48.png b/app/src/main/res/drawable-xhdpi/submit_48.png new file mode 100644 index 0000000..1790a94 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/submit_48.png differ diff --git a/app/src/main/res/drawable-xhdpi/trash_18.png b/app/src/main/res/drawable-xhdpi/trash_18.png new file mode 100644 index 0000000..f2a3bce Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/trash_18.png differ diff --git a/app/src/main/res/drawable-xhdpi/trash_20.png b/app/src/main/res/drawable-xhdpi/trash_20.png new file mode 100644 index 0000000..9c143ca Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/trash_20.png differ diff --git a/app/src/main/res/drawable-xhdpi/trash_24.png b/app/src/main/res/drawable-xhdpi/trash_24.png new file mode 100644 index 0000000..d11104c Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/trash_24.png differ diff --git a/app/src/main/res/drawable-xhdpi/trash_36.png b/app/src/main/res/drawable-xhdpi/trash_36.png new file mode 100644 index 0000000..108f6be Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/trash_36.png differ diff --git a/app/src/main/res/drawable-xhdpi/trash_48.png b/app/src/main/res/drawable-xhdpi/trash_48.png new file mode 100644 index 0000000..f2c4e32 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/trash_48.png differ diff --git a/app/src/main/res/drawable-xhdpi/up_18.png b/app/src/main/res/drawable-xhdpi/up_18.png new file mode 100644 index 0000000..98c5d7f Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/up_18.png differ diff --git a/app/src/main/res/drawable-xhdpi/up_20.png b/app/src/main/res/drawable-xhdpi/up_20.png new file mode 100644 index 0000000..0d7b906 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/up_20.png differ diff --git a/app/src/main/res/drawable-xhdpi/up_24.png b/app/src/main/res/drawable-xhdpi/up_24.png new file mode 100644 index 0000000..76f8a9b Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/up_24.png differ diff --git a/app/src/main/res/drawable-xhdpi/up_36.png b/app/src/main/res/drawable-xhdpi/up_36.png new file mode 100644 index 0000000..ef727c3 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/up_36.png differ diff --git a/app/src/main/res/drawable-xhdpi/up_48.png b/app/src/main/res/drawable-xhdpi/up_48.png new file mode 100644 index 0000000..8d9455c Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/up_48.png differ diff --git a/app/src/main/res/drawable-xxhdpi/arrow_18.png b/app/src/main/res/drawable-xxhdpi/arrow_18.png new file mode 100644 index 0000000..5f85e0c Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/arrow_18.png differ diff --git a/app/src/main/res/drawable-xxhdpi/arrow_20.png b/app/src/main/res/drawable-xxhdpi/arrow_20.png new file mode 100644 index 0000000..270c7ea Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/arrow_20.png differ diff --git a/app/src/main/res/drawable-xxhdpi/arrow_24.png b/app/src/main/res/drawable-xxhdpi/arrow_24.png new file mode 100644 index 0000000..6d5b3cd Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/arrow_24.png differ diff --git a/app/src/main/res/drawable-xxhdpi/arrow_36.png b/app/src/main/res/drawable-xxhdpi/arrow_36.png new file mode 100644 index 0000000..94c077c Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/arrow_36.png differ diff --git a/app/src/main/res/drawable-xxhdpi/arrow_48.png b/app/src/main/res/drawable-xxhdpi/arrow_48.png new file mode 100644 index 0000000..dc020f9 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/arrow_48.png differ diff --git a/app/src/main/res/drawable-xxhdpi/brightness_18.png b/app/src/main/res/drawable-xxhdpi/brightness_18.png new file mode 100644 index 0000000..bda1e61 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/brightness_18.png differ diff --git a/app/src/main/res/drawable-xxhdpi/brightness_20.png b/app/src/main/res/drawable-xxhdpi/brightness_20.png new file mode 100644 index 0000000..9154fbe Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/brightness_20.png differ diff --git a/app/src/main/res/drawable-xxhdpi/brightness_24.png b/app/src/main/res/drawable-xxhdpi/brightness_24.png new file mode 100644 index 0000000..4ecd08a Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/brightness_24.png differ diff --git a/app/src/main/res/drawable-xxhdpi/brightness_36.png b/app/src/main/res/drawable-xxhdpi/brightness_36.png new file mode 100644 index 0000000..d59f4a7 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/brightness_36.png differ diff --git a/app/src/main/res/drawable-xxhdpi/brightness_48.png b/app/src/main/res/drawable-xxhdpi/brightness_48.png new file mode 100644 index 0000000..443fcd3 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/brightness_48.png differ diff --git a/app/src/main/res/drawable-xxhdpi/cross_18.png b/app/src/main/res/drawable-xxhdpi/cross_18.png new file mode 100644 index 0000000..01af2bd Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/cross_18.png differ diff --git a/app/src/main/res/drawable-xxhdpi/cross_20.png b/app/src/main/res/drawable-xxhdpi/cross_20.png new file mode 100644 index 0000000..d99afca Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/cross_20.png differ diff --git a/app/src/main/res/drawable-xxhdpi/cross_24.png b/app/src/main/res/drawable-xxhdpi/cross_24.png new file mode 100644 index 0000000..6e04297 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/cross_24.png differ diff --git a/app/src/main/res/drawable-xxhdpi/cross_36.png b/app/src/main/res/drawable-xxhdpi/cross_36.png new file mode 100644 index 0000000..c72f550 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/cross_36.png differ diff --git a/app/src/main/res/drawable-xxhdpi/cross_48.png b/app/src/main/res/drawable-xxhdpi/cross_48.png new file mode 100644 index 0000000..8d62a6f Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/cross_48.png differ diff --git a/app/src/main/res/drawable-xxhdpi/document_18.png b/app/src/main/res/drawable-xxhdpi/document_18.png new file mode 100644 index 0000000..e20fe4a Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/document_18.png differ diff --git a/app/src/main/res/drawable-xxhdpi/document_20.png b/app/src/main/res/drawable-xxhdpi/document_20.png new file mode 100644 index 0000000..1e844a2 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/document_20.png differ diff --git a/app/src/main/res/drawable-xxhdpi/document_24.png b/app/src/main/res/drawable-xxhdpi/document_24.png new file mode 100644 index 0000000..7c96eb8 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/document_24.png differ diff --git a/app/src/main/res/drawable-xxhdpi/document_36.png b/app/src/main/res/drawable-xxhdpi/document_36.png new file mode 100644 index 0000000..d13cf2e Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/document_36.png differ diff --git a/app/src/main/res/drawable-xxhdpi/document_48.png b/app/src/main/res/drawable-xxhdpi/document_48.png new file mode 100644 index 0000000..6995e96 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/document_48.png differ diff --git a/app/src/main/res/drawable-xxhdpi/download_18.png b/app/src/main/res/drawable-xxhdpi/download_18.png new file mode 100644 index 0000000..c749ec3 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/download_18.png differ diff --git a/app/src/main/res/drawable-xxhdpi/download_20.png b/app/src/main/res/drawable-xxhdpi/download_20.png new file mode 100644 index 0000000..374dbf8 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/download_20.png differ diff --git a/app/src/main/res/drawable-xxhdpi/download_24.png b/app/src/main/res/drawable-xxhdpi/download_24.png new file mode 100644 index 0000000..f9dc21f Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/download_24.png differ diff --git a/app/src/main/res/drawable-xxhdpi/download_36.png b/app/src/main/res/drawable-xxhdpi/download_36.png new file mode 100644 index 0000000..4e5bea3 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/download_36.png differ diff --git a/app/src/main/res/drawable-xxhdpi/download_48.png b/app/src/main/res/drawable-xxhdpi/download_48.png new file mode 100644 index 0000000..b84aaec Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/download_48.png differ diff --git a/app/src/main/res/drawable-xxhdpi/eighteen_18.png b/app/src/main/res/drawable-xxhdpi/eighteen_18.png new file mode 100644 index 0000000..dff9f25 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/eighteen_18.png differ diff --git a/app/src/main/res/drawable-xxhdpi/eighteen_20.png b/app/src/main/res/drawable-xxhdpi/eighteen_20.png new file mode 100644 index 0000000..e6c964f Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/eighteen_20.png differ diff --git a/app/src/main/res/drawable-xxhdpi/eighteen_24.png b/app/src/main/res/drawable-xxhdpi/eighteen_24.png new file mode 100644 index 0000000..ccf35c5 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/eighteen_24.png differ diff --git a/app/src/main/res/drawable-xxhdpi/eighteen_36.png b/app/src/main/res/drawable-xxhdpi/eighteen_36.png new file mode 100644 index 0000000..13e35c4 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/eighteen_36.png differ diff --git a/app/src/main/res/drawable-xxhdpi/eighteen_48.png b/app/src/main/res/drawable-xxhdpi/eighteen_48.png new file mode 100644 index 0000000..d324649 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/eighteen_48.png differ diff --git a/app/src/main/res/drawable-xxhdpi/folder_18.png b/app/src/main/res/drawable-xxhdpi/folder_18.png new file mode 100644 index 0000000..ad51abd Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/folder_18.png differ diff --git a/app/src/main/res/drawable-xxhdpi/folder_20.png b/app/src/main/res/drawable-xxhdpi/folder_20.png new file mode 100644 index 0000000..773d3a3 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/folder_20.png differ diff --git a/app/src/main/res/drawable-xxhdpi/folder_24.png b/app/src/main/res/drawable-xxhdpi/folder_24.png new file mode 100644 index 0000000..0ba89c7 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/folder_24.png differ diff --git a/app/src/main/res/drawable-xxhdpi/folder_36.png b/app/src/main/res/drawable-xxhdpi/folder_36.png new file mode 100644 index 0000000..8cc160d Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/folder_36.png differ diff --git a/app/src/main/res/drawable-xxhdpi/folder_48.png b/app/src/main/res/drawable-xxhdpi/folder_48.png new file mode 100644 index 0000000..b3ab385 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/folder_48.png differ diff --git a/app/src/main/res/drawable-xxhdpi/home_18.png b/app/src/main/res/drawable-xxhdpi/home_18.png new file mode 100644 index 0000000..103576a Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/home_18.png differ diff --git a/app/src/main/res/drawable-xxhdpi/home_20.png b/app/src/main/res/drawable-xxhdpi/home_20.png new file mode 100644 index 0000000..4a37ac4 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/home_20.png differ diff --git a/app/src/main/res/drawable-xxhdpi/home_24.png b/app/src/main/res/drawable-xxhdpi/home_24.png new file mode 100644 index 0000000..1035f1d Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/home_24.png differ diff --git a/app/src/main/res/drawable-xxhdpi/home_36.png b/app/src/main/res/drawable-xxhdpi/home_36.png new file mode 100644 index 0000000..0ef2eb6 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/home_36.png differ diff --git a/app/src/main/res/drawable-xxhdpi/home_48.png b/app/src/main/res/drawable-xxhdpi/home_48.png new file mode 100644 index 0000000..ab115c3 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/home_48.png differ diff --git a/app/src/main/res/drawable-xxhdpi/info_18.png b/app/src/main/res/drawable-xxhdpi/info_18.png new file mode 100644 index 0000000..4bee780 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/info_18.png differ diff --git a/app/src/main/res/drawable-xxhdpi/info_20.png b/app/src/main/res/drawable-xxhdpi/info_20.png new file mode 100644 index 0000000..818385b Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/info_20.png differ diff --git a/app/src/main/res/drawable-xxhdpi/info_24.png b/app/src/main/res/drawable-xxhdpi/info_24.png new file mode 100644 index 0000000..8f43cd9 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/info_24.png differ diff --git a/app/src/main/res/drawable-xxhdpi/info_36.png b/app/src/main/res/drawable-xxhdpi/info_36.png new file mode 100644 index 0000000..cc66f5f Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/info_36.png differ diff --git a/app/src/main/res/drawable-xxhdpi/info_48.png b/app/src/main/res/drawable-xxhdpi/info_48.png new file mode 100644 index 0000000..ab25ec4 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/info_48.png differ diff --git a/app/src/main/res/drawable-xxhdpi/left_18.png b/app/src/main/res/drawable-xxhdpi/left_18.png new file mode 100644 index 0000000..c91d8df Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/left_18.png differ diff --git a/app/src/main/res/drawable-xxhdpi/left_20.png b/app/src/main/res/drawable-xxhdpi/left_20.png new file mode 100644 index 0000000..678b39b Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/left_20.png differ diff --git a/app/src/main/res/drawable-xxhdpi/left_24.png b/app/src/main/res/drawable-xxhdpi/left_24.png new file mode 100644 index 0000000..08de0f6 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/left_24.png differ diff --git a/app/src/main/res/drawable-xxhdpi/left_36.png b/app/src/main/res/drawable-xxhdpi/left_36.png new file mode 100644 index 0000000..e28008c Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/left_36.png differ diff --git a/app/src/main/res/drawable-xxhdpi/left_48.png b/app/src/main/res/drawable-xxhdpi/left_48.png new file mode 100644 index 0000000..dae338a Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/left_48.png differ diff --git a/app/src/main/res/drawable-xxhdpi/list_18.png b/app/src/main/res/drawable-xxhdpi/list_18.png new file mode 100644 index 0000000..aaad814 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/list_18.png differ diff --git a/app/src/main/res/drawable-xxhdpi/list_20.png b/app/src/main/res/drawable-xxhdpi/list_20.png new file mode 100644 index 0000000..dfdf757 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/list_20.png differ diff --git a/app/src/main/res/drawable-xxhdpi/list_24.png b/app/src/main/res/drawable-xxhdpi/list_24.png new file mode 100644 index 0000000..b498604 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/list_24.png differ diff --git a/app/src/main/res/drawable-xxhdpi/list_36.png b/app/src/main/res/drawable-xxhdpi/list_36.png new file mode 100644 index 0000000..c9ede17 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/list_36.png differ diff --git a/app/src/main/res/drawable-xxhdpi/list_48.png b/app/src/main/res/drawable-xxhdpi/list_48.png new file mode 100644 index 0000000..024c474 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/list_48.png differ diff --git a/app/src/main/res/drawable-xxhdpi/menu_18.png b/app/src/main/res/drawable-xxhdpi/menu_18.png new file mode 100644 index 0000000..a421ce0 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/menu_18.png differ diff --git a/app/src/main/res/drawable-xxhdpi/menu_20.png b/app/src/main/res/drawable-xxhdpi/menu_20.png new file mode 100644 index 0000000..acb7c5f Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/menu_20.png differ diff --git a/app/src/main/res/drawable-xxhdpi/menu_24.png b/app/src/main/res/drawable-xxhdpi/menu_24.png new file mode 100644 index 0000000..977d7f9 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/menu_24.png differ diff --git a/app/src/main/res/drawable-xxhdpi/menu_36.png b/app/src/main/res/drawable-xxhdpi/menu_36.png new file mode 100644 index 0000000..3cc4ce9 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/menu_36.png differ diff --git a/app/src/main/res/drawable-xxhdpi/menu_48.png b/app/src/main/res/drawable-xxhdpi/menu_48.png new file mode 100644 index 0000000..cf2f00a Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/menu_48.png differ diff --git a/app/src/main/res/drawable-xxhdpi/moon_18.png b/app/src/main/res/drawable-xxhdpi/moon_18.png new file mode 100644 index 0000000..c2575e5 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/moon_18.png differ diff --git a/app/src/main/res/drawable-xxhdpi/moon_20.png b/app/src/main/res/drawable-xxhdpi/moon_20.png new file mode 100644 index 0000000..5684a7d Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/moon_20.png differ diff --git a/app/src/main/res/drawable-xxhdpi/moon_24.png b/app/src/main/res/drawable-xxhdpi/moon_24.png new file mode 100644 index 0000000..649c1ae Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/moon_24.png differ diff --git a/app/src/main/res/drawable-xxhdpi/moon_36.png b/app/src/main/res/drawable-xxhdpi/moon_36.png new file mode 100644 index 0000000..a7a5c06 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/moon_36.png differ diff --git a/app/src/main/res/drawable-xxhdpi/moon_48.png b/app/src/main/res/drawable-xxhdpi/moon_48.png new file mode 100644 index 0000000..da6d3c2 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/moon_48.png differ diff --git a/app/src/main/res/drawable-xxhdpi/play_18.png b/app/src/main/res/drawable-xxhdpi/play_18.png new file mode 100644 index 0000000..ae09c1c Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/play_18.png differ diff --git a/app/src/main/res/drawable-xxhdpi/play_20.png b/app/src/main/res/drawable-xxhdpi/play_20.png new file mode 100644 index 0000000..be4a215 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/play_20.png differ diff --git a/app/src/main/res/drawable-xxhdpi/play_24.png b/app/src/main/res/drawable-xxhdpi/play_24.png new file mode 100644 index 0000000..074f367 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/play_24.png differ diff --git a/app/src/main/res/drawable-xxhdpi/play_36.png b/app/src/main/res/drawable-xxhdpi/play_36.png new file mode 100644 index 0000000..3e35947 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/play_36.png differ diff --git a/app/src/main/res/drawable-xxhdpi/play_48.png b/app/src/main/res/drawable-xxhdpi/play_48.png new file mode 100644 index 0000000..51ccf81 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/play_48.png differ diff --git a/app/src/main/res/drawable-xxhdpi/right_18.png b/app/src/main/res/drawable-xxhdpi/right_18.png new file mode 100644 index 0000000..6e8c6ed Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/right_18.png differ diff --git a/app/src/main/res/drawable-xxhdpi/right_20.png b/app/src/main/res/drawable-xxhdpi/right_20.png new file mode 100644 index 0000000..bfa16e1 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/right_20.png differ diff --git a/app/src/main/res/drawable-xxhdpi/right_24.png b/app/src/main/res/drawable-xxhdpi/right_24.png new file mode 100644 index 0000000..c80a113 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/right_24.png differ diff --git a/app/src/main/res/drawable-xxhdpi/right_36.png b/app/src/main/res/drawable-xxhdpi/right_36.png new file mode 100644 index 0000000..bba2e35 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/right_36.png differ diff --git a/app/src/main/res/drawable-xxhdpi/right_48.png b/app/src/main/res/drawable-xxhdpi/right_48.png new file mode 100644 index 0000000..e441011 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/right_48.png differ diff --git a/app/src/main/res/drawable-xxhdpi/settings_18.png b/app/src/main/res/drawable-xxhdpi/settings_18.png new file mode 100644 index 0000000..30f3a62 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/settings_18.png differ diff --git a/app/src/main/res/drawable-xxhdpi/settings_20.png b/app/src/main/res/drawable-xxhdpi/settings_20.png new file mode 100644 index 0000000..dc3acca Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/settings_20.png differ diff --git a/app/src/main/res/drawable-xxhdpi/settings_24.png b/app/src/main/res/drawable-xxhdpi/settings_24.png new file mode 100644 index 0000000..e5daa2d Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/settings_24.png differ diff --git a/app/src/main/res/drawable-xxhdpi/settings_36.png b/app/src/main/res/drawable-xxhdpi/settings_36.png new file mode 100644 index 0000000..8ab45a0 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/settings_36.png differ diff --git a/app/src/main/res/drawable-xxhdpi/settings_48.png b/app/src/main/res/drawable-xxhdpi/settings_48.png new file mode 100644 index 0000000..6ce7e50 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/settings_48.png differ diff --git a/app/src/main/res/drawable-xxhdpi/submit_18.png b/app/src/main/res/drawable-xxhdpi/submit_18.png new file mode 100644 index 0000000..35589fc Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/submit_18.png differ diff --git a/app/src/main/res/drawable-xxhdpi/submit_20.png b/app/src/main/res/drawable-xxhdpi/submit_20.png new file mode 100644 index 0000000..fea7d16 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/submit_20.png differ diff --git a/app/src/main/res/drawable-xxhdpi/submit_24.png b/app/src/main/res/drawable-xxhdpi/submit_24.png new file mode 100644 index 0000000..d3871ca Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/submit_24.png differ diff --git a/app/src/main/res/drawable-xxhdpi/submit_36.png b/app/src/main/res/drawable-xxhdpi/submit_36.png new file mode 100644 index 0000000..2883bcd Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/submit_36.png differ diff --git a/app/src/main/res/drawable-xxhdpi/submit_48.png b/app/src/main/res/drawable-xxhdpi/submit_48.png new file mode 100644 index 0000000..6bdeb1e Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/submit_48.png differ diff --git a/app/src/main/res/drawable-xxhdpi/trash_18.png b/app/src/main/res/drawable-xxhdpi/trash_18.png new file mode 100644 index 0000000..7c1eced Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/trash_18.png differ diff --git a/app/src/main/res/drawable-xxhdpi/trash_20.png b/app/src/main/res/drawable-xxhdpi/trash_20.png new file mode 100644 index 0000000..1bc2ec4 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/trash_20.png differ diff --git a/app/src/main/res/drawable-xxhdpi/trash_24.png b/app/src/main/res/drawable-xxhdpi/trash_24.png new file mode 100644 index 0000000..f5fc410 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/trash_24.png differ diff --git a/app/src/main/res/drawable-xxhdpi/trash_36.png b/app/src/main/res/drawable-xxhdpi/trash_36.png new file mode 100644 index 0000000..7306ca0 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/trash_36.png differ diff --git a/app/src/main/res/drawable-xxhdpi/trash_48.png b/app/src/main/res/drawable-xxhdpi/trash_48.png new file mode 100644 index 0000000..f70399c Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/trash_48.png differ diff --git a/app/src/main/res/drawable-xxhdpi/up_18.png b/app/src/main/res/drawable-xxhdpi/up_18.png new file mode 100644 index 0000000..9f366e1 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/up_18.png differ diff --git a/app/src/main/res/drawable-xxhdpi/up_20.png b/app/src/main/res/drawable-xxhdpi/up_20.png new file mode 100644 index 0000000..07f358a Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/up_20.png differ diff --git a/app/src/main/res/drawable-xxhdpi/up_24.png b/app/src/main/res/drawable-xxhdpi/up_24.png new file mode 100644 index 0000000..905ad41 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/up_24.png differ diff --git a/app/src/main/res/drawable-xxhdpi/up_36.png b/app/src/main/res/drawable-xxhdpi/up_36.png new file mode 100644 index 0000000..6e5e69f Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/up_36.png differ diff --git a/app/src/main/res/drawable-xxhdpi/up_48.png b/app/src/main/res/drawable-xxhdpi/up_48.png new file mode 100644 index 0000000..1eb1a4b Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/up_48.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/arrow_18.png b/app/src/main/res/drawable-xxxhdpi/arrow_18.png new file mode 100644 index 0000000..6d5b3cd Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/arrow_18.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/arrow_20.png b/app/src/main/res/drawable-xxxhdpi/arrow_20.png new file mode 100644 index 0000000..f64559a Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/arrow_20.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/arrow_24.png b/app/src/main/res/drawable-xxxhdpi/arrow_24.png new file mode 100644 index 0000000..8490e58 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/arrow_24.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/arrow_36.png b/app/src/main/res/drawable-xxxhdpi/arrow_36.png new file mode 100644 index 0000000..dc020f9 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/arrow_36.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/arrow_48.png b/app/src/main/res/drawable-xxxhdpi/arrow_48.png new file mode 100644 index 0000000..a2b7846 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/arrow_48.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/brightness_18.png b/app/src/main/res/drawable-xxxhdpi/brightness_18.png new file mode 100644 index 0000000..2b4ea61 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/brightness_18.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/brightness_20.png b/app/src/main/res/drawable-xxxhdpi/brightness_20.png new file mode 100644 index 0000000..5a07cae Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/brightness_20.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/brightness_24.png b/app/src/main/res/drawable-xxxhdpi/brightness_24.png new file mode 100644 index 0000000..1d85614 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/brightness_24.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/brightness_36.png b/app/src/main/res/drawable-xxxhdpi/brightness_36.png new file mode 100644 index 0000000..9ce9960 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/brightness_36.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/brightness_48.png b/app/src/main/res/drawable-xxxhdpi/brightness_48.png new file mode 100644 index 0000000..973ca5d Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/brightness_48.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/cross_18.png b/app/src/main/res/drawable-xxxhdpi/cross_18.png new file mode 100644 index 0000000..6e04297 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/cross_18.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/cross_20.png b/app/src/main/res/drawable-xxxhdpi/cross_20.png new file mode 100644 index 0000000..623321a Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/cross_20.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/cross_24.png b/app/src/main/res/drawable-xxxhdpi/cross_24.png new file mode 100644 index 0000000..526c5de Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/cross_24.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/cross_36.png b/app/src/main/res/drawable-xxxhdpi/cross_36.png new file mode 100644 index 0000000..8d62a6f Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/cross_36.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/cross_48.png b/app/src/main/res/drawable-xxxhdpi/cross_48.png new file mode 100644 index 0000000..c52e002 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/cross_48.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/document_18.png b/app/src/main/res/drawable-xxxhdpi/document_18.png new file mode 100644 index 0000000..555ee53 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/document_18.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/document_20.png b/app/src/main/res/drawable-xxxhdpi/document_20.png new file mode 100644 index 0000000..9859da7 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/document_20.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/document_24.png b/app/src/main/res/drawable-xxxhdpi/document_24.png new file mode 100644 index 0000000..aa7544a Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/document_24.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/document_36.png b/app/src/main/res/drawable-xxxhdpi/document_36.png new file mode 100644 index 0000000..c94f87b Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/document_36.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/document_48.png b/app/src/main/res/drawable-xxxhdpi/document_48.png new file mode 100644 index 0000000..32da3af Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/document_48.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/download_18.png b/app/src/main/res/drawable-xxxhdpi/download_18.png new file mode 100644 index 0000000..f9dc21f Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/download_18.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/download_20.png b/app/src/main/res/drawable-xxxhdpi/download_20.png new file mode 100644 index 0000000..edbaca4 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/download_20.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/download_24.png b/app/src/main/res/drawable-xxxhdpi/download_24.png new file mode 100644 index 0000000..7899f0a Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/download_24.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/download_36.png b/app/src/main/res/drawable-xxxhdpi/download_36.png new file mode 100644 index 0000000..b84aaec Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/download_36.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/download_48.png b/app/src/main/res/drawable-xxxhdpi/download_48.png new file mode 100644 index 0000000..f8bd9c1 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/download_48.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/eighteen_18.png b/app/src/main/res/drawable-xxxhdpi/eighteen_18.png new file mode 100644 index 0000000..cfe3f06 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/eighteen_18.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/eighteen_20.png b/app/src/main/res/drawable-xxxhdpi/eighteen_20.png new file mode 100644 index 0000000..54beea0 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/eighteen_20.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/eighteen_24.png b/app/src/main/res/drawable-xxxhdpi/eighteen_24.png new file mode 100644 index 0000000..b3931e1 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/eighteen_24.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/eighteen_36.png b/app/src/main/res/drawable-xxxhdpi/eighteen_36.png new file mode 100644 index 0000000..2ca67d4 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/eighteen_36.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/eighteen_48.png b/app/src/main/res/drawable-xxxhdpi/eighteen_48.png new file mode 100644 index 0000000..00754c9 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/eighteen_48.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/folder_18.png b/app/src/main/res/drawable-xxxhdpi/folder_18.png new file mode 100644 index 0000000..1ec51a5 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/folder_18.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/folder_20.png b/app/src/main/res/drawable-xxxhdpi/folder_20.png new file mode 100644 index 0000000..6b8a169 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/folder_20.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/folder_24.png b/app/src/main/res/drawable-xxxhdpi/folder_24.png new file mode 100644 index 0000000..083a4a5 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/folder_24.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/folder_36.png b/app/src/main/res/drawable-xxxhdpi/folder_36.png new file mode 100644 index 0000000..a1a0c3e Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/folder_36.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/folder_48.png b/app/src/main/res/drawable-xxxhdpi/folder_48.png new file mode 100644 index 0000000..a3773cc Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/folder_48.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/home_18.png b/app/src/main/res/drawable-xxxhdpi/home_18.png new file mode 100644 index 0000000..26c2a4a Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/home_18.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/home_20.png b/app/src/main/res/drawable-xxxhdpi/home_20.png new file mode 100644 index 0000000..4be4d1c Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/home_20.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/home_24.png b/app/src/main/res/drawable-xxxhdpi/home_24.png new file mode 100644 index 0000000..23b0c0f Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/home_24.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/home_36.png b/app/src/main/res/drawable-xxxhdpi/home_36.png new file mode 100644 index 0000000..ab115c3 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/home_36.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/home_48.png b/app/src/main/res/drawable-xxxhdpi/home_48.png new file mode 100644 index 0000000..bfe9494 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/home_48.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/info_18.png b/app/src/main/res/drawable-xxxhdpi/info_18.png new file mode 100644 index 0000000..8f43cd9 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/info_18.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/info_20.png b/app/src/main/res/drawable-xxxhdpi/info_20.png new file mode 100644 index 0000000..0aa4035 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/info_20.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/info_24.png b/app/src/main/res/drawable-xxxhdpi/info_24.png new file mode 100644 index 0000000..15287e6 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/info_24.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/info_36.png b/app/src/main/res/drawable-xxxhdpi/info_36.png new file mode 100644 index 0000000..ab25ec4 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/info_36.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/info_48.png b/app/src/main/res/drawable-xxxhdpi/info_48.png new file mode 100644 index 0000000..c42bcee Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/info_48.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/left_18.png b/app/src/main/res/drawable-xxxhdpi/left_18.png new file mode 100644 index 0000000..6f5345b Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/left_18.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/left_20.png b/app/src/main/res/drawable-xxxhdpi/left_20.png new file mode 100644 index 0000000..9bf484c Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/left_20.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/left_24.png b/app/src/main/res/drawable-xxxhdpi/left_24.png new file mode 100644 index 0000000..80edcec Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/left_24.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/left_36.png b/app/src/main/res/drawable-xxxhdpi/left_36.png new file mode 100644 index 0000000..dae338a Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/left_36.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/left_48.png b/app/src/main/res/drawable-xxxhdpi/left_48.png new file mode 100644 index 0000000..1cbbf4e Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/left_48.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/list_18.png b/app/src/main/res/drawable-xxxhdpi/list_18.png new file mode 100644 index 0000000..b498604 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/list_18.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/list_20.png b/app/src/main/res/drawable-xxxhdpi/list_20.png new file mode 100644 index 0000000..eaf90ca Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/list_20.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/list_24.png b/app/src/main/res/drawable-xxxhdpi/list_24.png new file mode 100644 index 0000000..0969c2e Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/list_24.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/list_36.png b/app/src/main/res/drawable-xxxhdpi/list_36.png new file mode 100644 index 0000000..024c474 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/list_36.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/list_48.png b/app/src/main/res/drawable-xxxhdpi/list_48.png new file mode 100644 index 0000000..7b98c35 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/list_48.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/menu_18.png b/app/src/main/res/drawable-xxxhdpi/menu_18.png new file mode 100644 index 0000000..977d7f9 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/menu_18.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/menu_20.png b/app/src/main/res/drawable-xxxhdpi/menu_20.png new file mode 100644 index 0000000..24f7ac9 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/menu_20.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/menu_24.png b/app/src/main/res/drawable-xxxhdpi/menu_24.png new file mode 100644 index 0000000..16d2f76 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/menu_24.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/menu_36.png b/app/src/main/res/drawable-xxxhdpi/menu_36.png new file mode 100644 index 0000000..82efdc6 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/menu_36.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/menu_48.png b/app/src/main/res/drawable-xxxhdpi/menu_48.png new file mode 100644 index 0000000..2ce7512 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/menu_48.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/moon_18.png b/app/src/main/res/drawable-xxxhdpi/moon_18.png new file mode 100644 index 0000000..8c960fd Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/moon_18.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/moon_20.png b/app/src/main/res/drawable-xxxhdpi/moon_20.png new file mode 100644 index 0000000..e137ac5 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/moon_20.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/moon_24.png b/app/src/main/res/drawable-xxxhdpi/moon_24.png new file mode 100644 index 0000000..febd64e Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/moon_24.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/moon_36.png b/app/src/main/res/drawable-xxxhdpi/moon_36.png new file mode 100644 index 0000000..64df12b Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/moon_36.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/moon_48.png b/app/src/main/res/drawable-xxxhdpi/moon_48.png new file mode 100644 index 0000000..657a908 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/moon_48.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/play_18.png b/app/src/main/res/drawable-xxxhdpi/play_18.png new file mode 100644 index 0000000..3080456 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/play_18.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/play_20.png b/app/src/main/res/drawable-xxxhdpi/play_20.png new file mode 100644 index 0000000..f6a34e1 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/play_20.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/play_24.png b/app/src/main/res/drawable-xxxhdpi/play_24.png new file mode 100644 index 0000000..5491791 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/play_24.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/play_36.png b/app/src/main/res/drawable-xxxhdpi/play_36.png new file mode 100644 index 0000000..7e4fd32 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/play_36.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/play_48.png b/app/src/main/res/drawable-xxxhdpi/play_48.png new file mode 100644 index 0000000..0057ac0 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/play_48.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/right_18.png b/app/src/main/res/drawable-xxxhdpi/right_18.png new file mode 100644 index 0000000..c80a113 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/right_18.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/right_20.png b/app/src/main/res/drawable-xxxhdpi/right_20.png new file mode 100644 index 0000000..838875a Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/right_20.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/right_24.png b/app/src/main/res/drawable-xxxhdpi/right_24.png new file mode 100644 index 0000000..111903e Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/right_24.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/right_36.png b/app/src/main/res/drawable-xxxhdpi/right_36.png new file mode 100644 index 0000000..071b328 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/right_36.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/right_48.png b/app/src/main/res/drawable-xxxhdpi/right_48.png new file mode 100644 index 0000000..4fc994a Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/right_48.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/settings_18.png b/app/src/main/res/drawable-xxxhdpi/settings_18.png new file mode 100644 index 0000000..e5daa2d Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/settings_18.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/settings_20.png b/app/src/main/res/drawable-xxxhdpi/settings_20.png new file mode 100644 index 0000000..86178e5 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/settings_20.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/settings_24.png b/app/src/main/res/drawable-xxxhdpi/settings_24.png new file mode 100644 index 0000000..8ac2a3a Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/settings_24.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/settings_36.png b/app/src/main/res/drawable-xxxhdpi/settings_36.png new file mode 100644 index 0000000..bda4a61 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/settings_36.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/settings_48.png b/app/src/main/res/drawable-xxxhdpi/settings_48.png new file mode 100644 index 0000000..82bd49f Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/settings_48.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/submit_18.png b/app/src/main/res/drawable-xxxhdpi/submit_18.png new file mode 100644 index 0000000..bbfdf46 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/submit_18.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/submit_20.png b/app/src/main/res/drawable-xxxhdpi/submit_20.png new file mode 100644 index 0000000..29a468e Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/submit_20.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/submit_24.png b/app/src/main/res/drawable-xxxhdpi/submit_24.png new file mode 100644 index 0000000..3e570b5 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/submit_24.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/submit_36.png b/app/src/main/res/drawable-xxxhdpi/submit_36.png new file mode 100644 index 0000000..6bdeb1e Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/submit_36.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/submit_48.png b/app/src/main/res/drawable-xxxhdpi/submit_48.png new file mode 100644 index 0000000..9861927 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/submit_48.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/trash_18.png b/app/src/main/res/drawable-xxxhdpi/trash_18.png new file mode 100644 index 0000000..494a20d Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/trash_18.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/trash_20.png b/app/src/main/res/drawable-xxxhdpi/trash_20.png new file mode 100644 index 0000000..84e5e0a Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/trash_20.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/trash_24.png b/app/src/main/res/drawable-xxxhdpi/trash_24.png new file mode 100644 index 0000000..7f2cfe7 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/trash_24.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/trash_36.png b/app/src/main/res/drawable-xxxhdpi/trash_36.png new file mode 100644 index 0000000..d0df40b Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/trash_36.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/trash_48.png b/app/src/main/res/drawable-xxxhdpi/trash_48.png new file mode 100644 index 0000000..41857a3 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/trash_48.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/up_18.png b/app/src/main/res/drawable-xxxhdpi/up_18.png new file mode 100644 index 0000000..905ad41 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/up_18.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/up_20.png b/app/src/main/res/drawable-xxxhdpi/up_20.png new file mode 100644 index 0000000..bb96312 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/up_20.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/up_24.png b/app/src/main/res/drawable-xxxhdpi/up_24.png new file mode 100644 index 0000000..8b75700 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/up_24.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/up_36.png b/app/src/main/res/drawable-xxxhdpi/up_36.png new file mode 100644 index 0000000..1eb1a4b Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/up_36.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/up_48.png b/app/src/main/res/drawable-xxxhdpi/up_48.png new file mode 100644 index 0000000..beddfe8 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/up_48.png differ diff --git a/app/src/main/res/drawable/arrow_24.xml b/app/src/main/res/drawable/arrow_24.xml new file mode 100644 index 0000000..3a442c7 --- /dev/null +++ b/app/src/main/res/drawable/arrow_24.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/src/main/res/drawable/brightness_24.xml b/app/src/main/res/drawable/brightness_24.xml new file mode 100644 index 0000000..3ec131f --- /dev/null +++ b/app/src/main/res/drawable/brightness_24.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/src/main/res/drawable/cross_24.xml b/app/src/main/res/drawable/cross_24.xml new file mode 100644 index 0000000..061826e --- /dev/null +++ b/app/src/main/res/drawable/cross_24.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/src/main/res/drawable/document_24.xml b/app/src/main/res/drawable/document_24.xml new file mode 100644 index 0000000..7cce3fa --- /dev/null +++ b/app/src/main/res/drawable/document_24.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/src/main/res/drawable/download_24.xml b/app/src/main/res/drawable/download_24.xml new file mode 100644 index 0000000..ac3d77b --- /dev/null +++ b/app/src/main/res/drawable/download_24.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/src/main/res/drawable/eighteen_24.xml b/app/src/main/res/drawable/eighteen_24.xml new file mode 100644 index 0000000..03ab624 --- /dev/null +++ b/app/src/main/res/drawable/eighteen_24.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/src/main/res/drawable/folder_24.xml b/app/src/main/res/drawable/folder_24.xml new file mode 100644 index 0000000..53c37bb --- /dev/null +++ b/app/src/main/res/drawable/folder_24.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/src/main/res/drawable/home_24.xml b/app/src/main/res/drawable/home_24.xml new file mode 100644 index 0000000..718a0c6 --- /dev/null +++ b/app/src/main/res/drawable/home_24.xml @@ -0,0 +1 @@ + \ 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 0000000..07d5da9 --- /dev/null +++ b/app/src/main/res/drawable/ic_launcher_background.xml @@ -0,0 +1,170 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/ic_launcher_foreground.xml b/app/src/main/res/drawable/ic_launcher_foreground.xml new file mode 100644 index 0000000..3fb7a4d --- /dev/null +++ b/app/src/main/res/drawable/ic_launcher_foreground.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/app/src/main/res/drawable/info_24.xml b/app/src/main/res/drawable/info_24.xml new file mode 100644 index 0000000..2c2f5b6 --- /dev/null +++ b/app/src/main/res/drawable/info_24.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/src/main/res/drawable/left_24.xml b/app/src/main/res/drawable/left_24.xml new file mode 100644 index 0000000..1228d87 --- /dev/null +++ b/app/src/main/res/drawable/left_24.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/src/main/res/drawable/list_24.xml b/app/src/main/res/drawable/list_24.xml new file mode 100644 index 0000000..9f62eb7 --- /dev/null +++ b/app/src/main/res/drawable/list_24.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/src/main/res/drawable/menu_24.xml b/app/src/main/res/drawable/menu_24.xml new file mode 100644 index 0000000..4d29f22 --- /dev/null +++ b/app/src/main/res/drawable/menu_24.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/src/main/res/drawable/moon_24.xml b/app/src/main/res/drawable/moon_24.xml new file mode 100644 index 0000000..4416485 --- /dev/null +++ b/app/src/main/res/drawable/moon_24.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/src/main/res/drawable/play_24.xml b/app/src/main/res/drawable/play_24.xml new file mode 100644 index 0000000..85324bb --- /dev/null +++ b/app/src/main/res/drawable/play_24.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/src/main/res/drawable/right_24.xml b/app/src/main/res/drawable/right_24.xml new file mode 100644 index 0000000..eb53577 --- /dev/null +++ b/app/src/main/res/drawable/right_24.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/src/main/res/drawable/settings_24.xml b/app/src/main/res/drawable/settings_24.xml new file mode 100644 index 0000000..8ae092f --- /dev/null +++ b/app/src/main/res/drawable/settings_24.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/src/main/res/drawable/submit_24.xml b/app/src/main/res/drawable/submit_24.xml new file mode 100644 index 0000000..a363756 --- /dev/null +++ b/app/src/main/res/drawable/submit_24.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/src/main/res/drawable/trash_24.xml b/app/src/main/res/drawable/trash_24.xml new file mode 100644 index 0000000..37130d5 --- /dev/null +++ b/app/src/main/res/drawable/trash_24.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/src/main/res/drawable/up_24.xml b/app/src/main/res/drawable/up_24.xml new file mode 100644 index 0000000..de9455b --- /dev/null +++ b/app/src/main/res/drawable/up_24.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_description.xml b/app/src/main/res/layout/activity_description.xml new file mode 100644 index 0000000..b853c46 --- /dev/null +++ b/app/src/main/res/layout/activity_description.xml @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_directory.xml b/app/src/main/res/layout/activity_directory.xml new file mode 100644 index 0000000..2d36e7f --- /dev/null +++ b/app/src/main/res/layout/activity_directory.xml @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + +