From e7e3d194757ce1ac7eb8a68bd84ab043b0d58cd0 Mon Sep 17 00:00:00 2001 From: Joachim Dunant Date: Thu, 5 Mar 2020 21:07:10 +0100 Subject: [PATCH] First implementation of settings UI & Main menu drawer --- app/build.gradle | 22 ++++++- app/src/main/AndroidManifest.xml | 5 +- app/src/main/Thumbs.db | Bin 0 -> 26112 bytes .../java/com/h/pixeldroid/MainActivity.kt | 62 +++++++++++++++++- .../settings/ui/AccessibilityFragment.kt | 22 +++++++ .../pixeldroid/settings/ui/AccountFragment.kt | 19 ++++++ .../settings/ui/SettingsFragment.kt | 18 +++++ app/src/main/res/drawable/ic_bluetooth.xml | 9 +++ app/src/main/res/drawable/ic_font_size.xml | 9 +++ .../main/res/drawable/ic_notifications.xml | 9 +++ app/src/main/res/drawable/ic_settings.xml | 9 +++ app/src/main/res/drawable/ic_time.xml | 9 +++ app/src/main/res/drawable/ic_translate.xml | 9 +++ app/src/main/res/drawable/side_nav_bar.xml | 9 +++ app/src/main/res/layout/activity_main.xml | 43 +++++++++--- .../res/layout/fragment_accessibility.xml | 23 +++++++ app/src/main/res/layout/fragment_account.xml | 23 +++++++ app/src/main/res/layout/nav_header.xml | 34 ++++++++++ .../main/res/menu/activity_main_drawer.xml | 18 +++++ app/src/main/res/values-v21/styles.xml | 8 +++ app/src/main/res/values/dimens.xml | 8 +++ app/src/main/res/values/strings.xml | 23 +++++++ app/src/main/res/values/styles.xml | 9 +++ app/src/main/res/xml/settings_screen.xml | 43 ++++++++++++ build.gradle | 2 +- 25 files changed, 430 insertions(+), 15 deletions(-) create mode 100644 app/src/main/Thumbs.db create mode 100644 app/src/main/java/com/h/pixeldroid/settings/ui/AccessibilityFragment.kt create mode 100644 app/src/main/java/com/h/pixeldroid/settings/ui/AccountFragment.kt create mode 100644 app/src/main/java/com/h/pixeldroid/settings/ui/SettingsFragment.kt create mode 100644 app/src/main/res/drawable/ic_bluetooth.xml create mode 100644 app/src/main/res/drawable/ic_font_size.xml create mode 100644 app/src/main/res/drawable/ic_notifications.xml create mode 100644 app/src/main/res/drawable/ic_settings.xml create mode 100644 app/src/main/res/drawable/ic_time.xml create mode 100644 app/src/main/res/drawable/ic_translate.xml create mode 100644 app/src/main/res/drawable/side_nav_bar.xml create mode 100644 app/src/main/res/layout/fragment_accessibility.xml create mode 100644 app/src/main/res/layout/fragment_account.xml create mode 100644 app/src/main/res/layout/nav_header.xml create mode 100644 app/src/main/res/menu/activity_main_drawer.xml create mode 100644 app/src/main/res/values-v21/styles.xml create mode 100644 app/src/main/res/values/dimens.xml create mode 100644 app/src/main/res/xml/settings_screen.xml diff --git a/app/build.gradle b/app/build.gradle index d52bd54f..b761b519 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -27,6 +27,18 @@ android { } } +// To inline the bytecode built with JVM target 1.8 into +// bytecode that is being built with JVM target 1.6. (e.g. navArgs) + + + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } + kotlinOptions { + jvmTarget = "1.8" + } + } dependencies { @@ -34,7 +46,15 @@ dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" implementation 'androidx.appcompat:appcompat:1.1.0' implementation 'androidx.core:core-ktx:1.2.0' + implementation 'androidx.preference:preference:1.1.0' implementation 'androidx.constraintlayout:constraintlayout:1.1.3' + implementation 'androidx.legacy:legacy-support-v4:1.0.0' + implementation 'com.google.android.material:material:1.0.0' + implementation 'androidx.navigation:navigation-fragment:2.0.0' + implementation 'androidx.navigation:navigation-ui:2.0.0' + implementation 'androidx.lifecycle:lifecycle-extensions:2.0.0' + implementation 'androidx.navigation:navigation-fragment-ktx:2.0.0' + implementation 'androidx.navigation:navigation-ui-ktx:2.0.0' testImplementation 'junit:junit:4.13' androidTestImplementation 'androidx.test.ext:junit:1.1.1' androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' @@ -63,4 +83,4 @@ task jacocoTestReport(type: JacocoReport, dependsOn: ['testDebugUnitTest', 'crea executionData = fileTree(dir: project.buildDir, includes: [ 'jacoco/testDebugUnitTest.exec', 'outputs/code-coverage/connected/*coverage.ec' ]) -} \ No newline at end of file +} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 95641a5b..ae5f7136 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -3,13 +3,14 @@ package="com.h.pixeldroid"> - + diff --git a/app/src/main/Thumbs.db b/app/src/main/Thumbs.db new file mode 100644 index 0000000000000000000000000000000000000000..aaafae7ca78bb770f0dce2241690cae8ec56b4fd GIT binary patch literal 26112 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

TFg3 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 z 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 hb1wi@A+~@!R literal 0 HcmV?d00001 diff --git a/app/src/main/java/com/h/pixeldroid/MainActivity.kt b/app/src/main/java/com/h/pixeldroid/MainActivity.kt index 948e924f..753c56d6 100644 --- a/app/src/main/java/com/h/pixeldroid/MainActivity.kt +++ b/app/src/main/java/com/h/pixeldroid/MainActivity.kt @@ -1,12 +1,72 @@ package com.h.pixeldroid +import android.content.Intent import androidx.appcompat.app.AppCompatActivity import android.os.Bundle +import android.view.MenuItem +import android.view.View +import androidx.annotation.NonNull +import androidx.appcompat.app.ActionBarDrawerToggle +import androidx.appcompat.widget.Toolbar +import androidx.core.view.GravityCompat +import androidx.drawerlayout.widget.DrawerLayout +import com.google.android.material.navigation.NavigationView +import com.h.pixeldroid.settings.ui.* -class MainActivity : AppCompatActivity() { +class MainActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelectedListener { + + private lateinit var drawerLayout: DrawerLayout override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) + + val toolbar : Toolbar = findViewById(R.id.toolbar) + setSupportActionBar(toolbar) + + drawerLayout = findViewById(R.id.drawer_layout) + val navigationView: NavigationView = findViewById(R.id.nav_view) + navigationView.setNavigationItemSelectedListener(this) + + val toggle = ActionBarDrawerToggle(this, drawerLayout, toolbar, + R.string.navigation_drawer_open, R.string.navigation_drawer_close) + drawerLayout.addDrawerListener(toggle) + toggle.syncState() + + // On startup ONLY, start at the account settings + if(savedInstanceState == null) { + supportFragmentManager.beginTransaction().replace(R.id.fragment_container, + AccountFragment()).commit() + navigationView.setCheckedItem(R.id.nav_account) + } + } + + /* + On click go to the corresponding activity + */ + override fun onNavigationItemSelected(@NonNull item: MenuItem): Boolean { + when (item.itemId){ + R.id.nav_account -> supportFragmentManager.beginTransaction().replace(R.id.fragment_container, + AccountFragment()).commit() + R.id.nav_accessibility -> supportFragmentManager.beginTransaction().replace(R.id.fragment_container, + AccessibilityFragment()).commit() + R.id.nav_settings -> supportFragmentManager.beginTransaction().replace(R.id.fragment_container, + SettingsFragment()).commit() + } + + drawerLayout.closeDrawer(GravityCompat.START) + + return true + } + + /* + Makes it possible to drag the settings menu from the left + */ + override fun onBackPressed() { + if(drawerLayout.isDrawerOpen(GravityCompat.START)){ + drawerLayout.closeDrawer(GravityCompat.START) + } else { + super.onBackPressed() + } } } diff --git a/app/src/main/java/com/h/pixeldroid/settings/ui/AccessibilityFragment.kt b/app/src/main/java/com/h/pixeldroid/settings/ui/AccessibilityFragment.kt new file mode 100644 index 00000000..382563ae --- /dev/null +++ b/app/src/main/java/com/h/pixeldroid/settings/ui/AccessibilityFragment.kt @@ -0,0 +1,22 @@ +package com.h.pixeldroid.settings.ui + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.fragment.app.Fragment +import androidx.lifecycle.Observer +import androidx.lifecycle.ViewModelProviders +import com.h.pixeldroid.R + +class AccessibilityFragment : Fragment() { + + override fun onCreateView( + inflater: LayoutInflater, + container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { + return inflater.inflate(R.layout.fragment_accessibility, container, false) + } +} diff --git a/app/src/main/java/com/h/pixeldroid/settings/ui/AccountFragment.kt b/app/src/main/java/com/h/pixeldroid/settings/ui/AccountFragment.kt new file mode 100644 index 00000000..4593d6d2 --- /dev/null +++ b/app/src/main/java/com/h/pixeldroid/settings/ui/AccountFragment.kt @@ -0,0 +1,19 @@ +package com.h.pixeldroid.settings.ui + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.fragment.app.Fragment +import com.h.pixeldroid.R + +class AccountFragment : Fragment() { + + override fun onCreateView( + inflater: LayoutInflater, + container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { + return inflater.inflate(R.layout.fragment_account, container, false) + } +} diff --git a/app/src/main/java/com/h/pixeldroid/settings/ui/SettingsFragment.kt b/app/src/main/java/com/h/pixeldroid/settings/ui/SettingsFragment.kt new file mode 100644 index 00000000..e9d32bce --- /dev/null +++ b/app/src/main/java/com/h/pixeldroid/settings/ui/SettingsFragment.kt @@ -0,0 +1,18 @@ +package com.h.pixeldroid.settings.ui + +import android.os.Bundle +import android.preference.PreferenceFragment +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.fragment.app.Fragment +import androidx.preference.PreferenceFragmentCompat +import com.h.pixeldroid.R + +class SettingsFragment : PreferenceFragmentCompat() { + + override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { + setPreferencesFromResource(R.xml.settings_screen, rootKey) + } + +} diff --git a/app/src/main/res/drawable/ic_bluetooth.xml b/app/src/main/res/drawable/ic_bluetooth.xml new file mode 100644 index 00000000..1094756b --- /dev/null +++ b/app/src/main/res/drawable/ic_bluetooth.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_font_size.xml b/app/src/main/res/drawable/ic_font_size.xml new file mode 100644 index 00000000..dd81ddfd --- /dev/null +++ b/app/src/main/res/drawable/ic_font_size.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_notifications.xml b/app/src/main/res/drawable/ic_notifications.xml new file mode 100644 index 00000000..be9f8368 --- /dev/null +++ b/app/src/main/res/drawable/ic_notifications.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_settings.xml b/app/src/main/res/drawable/ic_settings.xml new file mode 100644 index 00000000..24a5623c --- /dev/null +++ b/app/src/main/res/drawable/ic_settings.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_time.xml b/app/src/main/res/drawable/ic_time.xml new file mode 100644 index 00000000..2239a4f4 --- /dev/null +++ b/app/src/main/res/drawable/ic_time.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_translate.xml b/app/src/main/res/drawable/ic_translate.xml new file mode 100644 index 00000000..10841511 --- /dev/null +++ b/app/src/main/res/drawable/ic_translate.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/side_nav_bar.xml b/app/src/main/res/drawable/side_nav_bar.xml new file mode 100644 index 00000000..6d81870b --- /dev/null +++ b/app/src/main/res/drawable/side_nav_bar.xml @@ -0,0 +1,9 @@ + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 4fc24441..3045be68 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -1,18 +1,41 @@ - - + - \ No newline at end of file + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_accessibility.xml b/app/src/main/res/layout/fragment_accessibility.xml new file mode 100644 index 00000000..99c93acf --- /dev/null +++ b/app/src/main/res/layout/fragment_accessibility.xml @@ -0,0 +1,23 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_account.xml b/app/src/main/res/layout/fragment_account.xml new file mode 100644 index 00000000..3329f468 --- /dev/null +++ b/app/src/main/res/layout/fragment_account.xml @@ -0,0 +1,23 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/nav_header.xml b/app/src/main/res/layout/nav_header.xml new file mode 100644 index 00000000..8d72ad84 --- /dev/null +++ b/app/src/main/res/layout/nav_header.xml @@ -0,0 +1,34 @@ + + + + + + + + + + diff --git a/app/src/main/res/menu/activity_main_drawer.xml b/app/src/main/res/menu/activity_main_drawer.xml new file mode 100644 index 00000000..c58294b2 --- /dev/null +++ b/app/src/main/res/menu/activity_main_drawer.xml @@ -0,0 +1,18 @@ + +

+ + + + + + + diff --git a/app/src/main/res/values-v21/styles.xml b/app/src/main/res/values-v21/styles.xml new file mode 100644 index 00000000..fd7a0584 --- /dev/null +++ b/app/src/main/res/values-v21/styles.xml @@ -0,0 +1,8 @@ + + + + diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml new file mode 100644 index 00000000..4ab4520f --- /dev/null +++ b/app/src/main/res/values/dimens.xml @@ -0,0 +1,8 @@ + + + 16dp + 16dp + 8dp + 176dp + 16dp + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 166d3070..b475128c 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,3 +1,26 @@ PixelDroid + Open navigation drawer + Close navigation drawer + Settings + + Account name + Account informations + + My Profile + Settings + Accessibility + + + English + Français + 日本人 + + + + Small + Medium + Big + + diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 5885930d..545b9c6d 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -8,4 +8,13 @@ @color/colorAccent + + +