Skip to content
Snippets Groups Projects
Verified Commit 206b3c64 authored by Julian Dehm's avatar Julian Dehm
Browse files

Add navdrawer and first ui mockup

parent ff7f1417
No related branches found
No related tags found
No related merge requests found
Showing
with 280 additions and 44 deletions
......@@ -9,7 +9,7 @@ allprojects {
}
buildscript {
ext.kotlin_version = '1.2.41'
ext.kotlin_version = '1.2.50'
repositories {
jcenter()
mavenLocal()
......
......@@ -37,12 +37,15 @@ dependencies {
implementation project(':bramble-android')
implementation project(path: ':repeater-core', configuration: 'default')
def supportVersion = '27.1.1'
compileOnly 'javax.annotation:jsr250-api:1.0'
kapt "com.google.dagger:dagger-compiler:2.0.2"
implementation 'com.android.support:appcompat-v7:27.1.1'
implementation("com.android.support:appcompat-v7:27.1.1")
implementation 'com.android.support.constraint:constraint-layout:1.1.0'
implementation "com.android.support:appcompat-v7:$supportVersion"
implementation "com.android.support:support-v4:$supportVersion"
implementation ("com.android.support:design:$supportVersion") {
exclude module: 'support-v4'
}
implementation 'com.android.support.constraint:constraint-layout:1.1.2'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
......
......@@ -9,14 +9,16 @@
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name="org.briarproject.repeater.activity.NavDrawerActivity">
android:theme="@style/BriarTheme">\
<activity
android:name="org.briarproject.repeater.activity.NavDrawerActivity"
android:launchMode="singleTop"
android:theme="@style/BriarTheme.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<service
android:name="org.briarproject.repeater.RepeaterService"
android:exported="false">
......
package org.briarproject.repeater.activity
import android.app.FragmentManager.POP_BACK_STACK_INCLUSIVE
import android.content.Intent
import android.support.v7.app.AppCompatActivity
import android.content.res.Configuration
import android.os.Bundle
import android.support.design.widget.NavigationView
import android.support.v4.view.GravityCompat.START
import android.support.v7.app.ActionBarDrawerToggle
import android.support.v7.app.AppCompatActivity
import android.view.Menu
import android.view.MenuItem
import kotlinx.android.synthetic.main.activity_nav_drawer.*
import kotlinx.android.synthetic.main.navigation_menu.*
import kotlinx.android.synthetic.main.toolbar.*
import org.briarproject.briar.repeater.R
import org.briarproject.repeater.RepeaterService
import org.briarproject.repeater.fragment.BaseFragment
import org.briarproject.repeater.fragment.OverviewFragment
import org.briarproject.repeater.fragment.UserListFragment
class NavDrawerActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelectedListener {
class NavDrawerActivity : AppCompatActivity() {
private lateinit var drawerToggle: ActionBarDrawerToggle
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_nav_drawer)
startService(Intent(this, RepeaterService::class.java))
setSupportActionBar(toolbar)
supportActionBar!!.setDisplayHomeAsUpEnabled(true)
supportActionBar!!.setHomeButtonEnabled(true)
drawerToggle = ActionBarDrawerToggle(this, drawerLayout, toolbar,
R.string.nav_drawer_open_description,
R.string.nav_drawer_close_description)
drawerLayout.addDrawerListener(drawerToggle)
drawerToggle.syncState()
navigation.setNavigationItemSelectedListener(this)
if (savedInstanceState == null)
startFragment(OverviewFragment(), R.id.nav_btn_overview)
}
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
menuInflater.inflate(R.menu.add_user_action, menu)
return super.onCreateOptionsMenu(menu)
}
override fun onNavigationItemSelected(item: MenuItem): Boolean {
drawerLayout.closeDrawer(START)
clearBackStack()
loadFragment(item.itemId)
return true
}
private fun loadFragment(fragmentId: Int) {
when (fragmentId) {
R.id.nav_btn_overview -> startFragment(OverviewFragment())
R.id.nav_btn_users -> startFragment(UserListFragment())
R.id.nav_btn_settings -> {}// TODO
R.id.nav_btn_signout -> {}// TODO
}
}
private fun clearBackStack() {
supportFragmentManager.popBackStackImmediate(null,
POP_BACK_STACK_INCLUSIVE)
}
override fun onOptionsItemSelected(item: MenuItem?): Boolean {
return when (item?.itemId) {
R.id.action_add_repeater -> {
// TODO: add repeater screen
true
}
else ->
super.onOptionsItemSelected(item)
}
}
override fun onConfigurationChanged(newConfig: Configuration?) {
super.onConfigurationChanged(newConfig)
drawerToggle.onConfigurationChanged(newConfig)
}
private fun startFragment(fragment: BaseFragment, itemId: Int) {
navigation.setCheckedItem(itemId)
startFragment(fragment)
}
private fun startFragment(fragment: BaseFragment) {
if (supportFragmentManager.backStackEntryCount == 0)
startFragment(fragment, false)
else
startFragment(fragment, true)
}
private fun startFragment(fragment: BaseFragment,
isAddedToBackStack: Boolean) {
val trans = supportFragmentManager.beginTransaction()
.setCustomAnimations(R.animator.fade_in,
R.animator.fade_out, R.animator.fade_in,
R.animator.fade_out)
.replace(R.id.fragmentContainer, fragment,
fragment.getUniqueTag())
if (isAddedToBackStack) {
trans.addToBackStack(fragment.getUniqueTag())
}
trans.commit()
}
}
package org.briarproject.repeater.fragment
import android.support.v4.app.Fragment
abstract class BaseFragment : Fragment() {
abstract fun getUniqueTag(): String
}
\ No newline at end of file
package org.briarproject.repeater.fragment
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import org.briarproject.briar.repeater.R
class OverviewFragment : BaseFragment() {
companion object {
const val TAG = "OverviewFragment"
}
override fun getUniqueTag() = TAG
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
activity?.title = getString(R.string.overview)
return inflater.inflate(R.layout.fragment_overview, container, false)
}
}
package org.briarproject.repeater.fragment
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ArrayAdapter
import kotlinx.android.synthetic.main.fragment_userlist.*
import org.briarproject.briar.repeater.R
class UserListFragment : BaseFragment() {
companion object {
const val TAG = "UserListFragment"
}
private val users: Array<String> = arrayOf()
private lateinit var adapter: ArrayAdapter<String>
override fun getUniqueTag() = TAG
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
activity?.title = getString(R.string.users)
return inflater.inflate(R.layout.fragment_userlist, container, false)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
adapter = ArrayAdapter(context, android.R.layout.simple_list_item_1, ArrayList(users.asList()))
userlist.adapter = adapter
adapter.add("Admin")
}
}
<?xml version="1.0" encoding="utf-8"?>
<set
xmlns:android="http://schemas.android.com/apk/res/android">
<!-- slide in from right -->
<translate
android:duration="@android:integer/config_mediumAnimTime"
android:fromXDelta="100%p"
android:interpolator="@android:interpolator/decelerate_quad"
android:toXDelta="0"/>
</set>
<?xml version="1.0" encoding="utf-8"?>
<set
xmlns:android="http://schemas.android.com/apk/res/android">
<!-- slide out to right -->
<translate
android:duration="@android:integer/config_mediumAnimTime"
android:fromXDelta="0"
android:interpolator="@android:interpolator/accelerate_quad"
android:toXDelta="100%p"/>
</set>
<?xml version="1.0" encoding="utf-8"?>
<alpha
xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="@android:integer/config_mediumAnimTime"
android:fromAlpha="0.0"
android:interpolator="@android:interpolator/decelerate_quad"
android:toAlpha="1.0"/>
<?xml version="1.0" encoding="utf-8"?>
<alpha
xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="@android:integer/config_mediumAnimTime"
android:fromAlpha="1.0"
android:interpolator="@android:interpolator/accelerate_quad"
android:toAlpha="0.0"/>
<?xml version="1.0" encoding="utf-8"?>
<set
xmlns:android="http://schemas.android.com/apk/res/android">
<!-- slide in from right -->
<translate
android:duration="@android:integer/config_mediumAnimTime"
android:fromXDelta="100%p"
android:interpolator="@android:interpolator/decelerate_quad"
android:toXDelta="0"/>
</set>
<?xml version="1.0" encoding="utf-8"?>
<set
xmlns:android="http://schemas.android.com/apk/res/android">
<!-- slide out to right -->
<translate
android:duration="@android:integer/config_mediumAnimTime"
android:fromXDelta="0"
android:interpolator="@android:interpolator/accelerate_quad"
android:toXDelta="100%p"/>
</set>
<?xml version="1.0" encoding="utf-8"?>
<alpha
xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="@android:integer/config_mediumAnimTime"
android:fromAlpha="0.0"
android:interpolator="@android:interpolator/decelerate_quad"
android:toAlpha="1.0"/>
<?xml version="1.0" encoding="utf-8"?>
<alpha
xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="@android:integer/config_mediumAnimTime"
android:fromAlpha="1.0"
android:interpolator="@android:interpolator/accelerate_quad"
android:toAlpha="0.0"/>
<?xml version="1.0" encoding="utf-8"?>
<set>
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
android:propertyName="alpha"
android:valueType="floatType"
android:valueFrom="0.0"
android:valueTo="1.0"
android:duration="@android:integer/config_longAnimTime"/>
</set>
<?xml version="1.0" encoding="utf-8"?>
<set>
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
android:propertyName="alpha"
android:valueType="floatType"
android:valueFrom="1.0"
android:valueTo="0.0"
android:duration="@android:integer/config_longAnimTime"/>
</set>
<vector xmlns:aapt="http://schemas.android.com/aapt"
xmlns:android="http://schemas.android.com/apk/res/android"
android:width="108dp"
android:height="108dp"
android:viewportHeight="108"
android:viewportWidth="108">
<path
android:fillType="evenOdd"
android:pathData="M32,64C32,64 38.39,52.99 44.13,50.95C51.37,48.37 70.14,49.57 70.14,49.57L108.26,87.69L108,109.01L75.97,107.97L32,64Z"
android:strokeColor="#00000000"
android:strokeWidth="1">
<aapt:attr name="android:fillColor">
<gradient
android:endX="78.5885"
android:endY="90.9159"
android:startX="48.7653"
android:startY="61.0927"
android:type="linear">
<item
android:color="#44000000"
android:offset="0.0"/>
<item
android:color="#00000000"
android:offset="1.0"/>
</gradient>
</aapt:attr>
</path>
<path
android:fillColor="#FFFFFF"
android:fillType="nonZero"
android:pathData="M66.94,46.02L66.94,46.02C72.44,50.07 76,56.61 76,64L32,64C32,56.61 35.56,50.11 40.98,46.06L36.18,41.19C35.45,40.45 35.45,39.3 36.18,38.56C36.91,37.81 38.05,37.81 38.78,38.56L44.25,44.05C47.18,42.57 50.48,41.71 54,41.71C57.48,41.71 60.78,42.57 63.68,44.05L69.11,38.56C69.84,37.81 70.98,37.81 71.71,38.56C72.44,39.3 72.44,40.45 71.71,41.19L66.94,46.02ZM62.94,56.92C64.08,56.92 65,56.01 65,54.88C65,53.76 64.08,52.85 62.94,52.85C61.8,52.85 60.88,53.76 60.88,54.88C60.88,56.01 61.8,56.92 62.94,56.92ZM45.06,56.92C46.2,56.92 47.13,56.01 47.13,54.88C47.13,53.76 46.2,52.85 45.06,52.85C43.92,52.85 43,53.76 43,54.88C43,56.01 43.92,56.92 45.06,56.92Z"
android:strokeColor="#00000000"
android:strokeWidth="1"/>
</vector>
<vector android:height="24dp"
android:viewportHeight="24.0" android:viewportWidth="24.0"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#FFFFFFFF" android:pathData="M19,13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z"/>
</vector>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:alpha="0.54"
android:viewportHeight="24.0"
android:viewportWidth="24.0">
<path
android:fillColor="#FF000000"
android:pathData="M20,0L4,0v2h16L20,0zM4,24h16v-2L4,22v2zM20,4L4,4c-1.1,0 -2,0.9 -2,2v12c0,1.1 0.9,2 2,2h16c1.1,0 2,-0.9 2,-2L22,6c0,-1.1 -0.9,-2 -2,-2zM12,6.75c1.24,0 2.25,1.01 2.25,2.25s-1.01,2.25 -2.25,2.25S9.75,10.24 9.75,9 10.76,6.75 12,6.75zM17,17L7,17v-1.5c0,-1.67 3.33,-2.5 5,-2.5s5,0.83 5,2.5L17,17z"/>
</vector>
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment