blob: 19e183b6f491a41203f516ccd383cdd7c99ec73b [file] [log] [blame]
package ${escapeKotlinIdentifiers(packageName)}
<#if hasAppBar>
<#if features == 'tabs'>
import android.support.design.widget.TabLayout
</#if>
import android.support.design.widget.Snackbar
import android.support.v7.app.AppCompatActivity
<#else> <#-- hasAppBar -->
import ${superClassFqcn};
import android.<#if appCompat>support.v7.</#if>app.ActionBar
import android.<#if appCompat>support.v4.</#if>app.FragmentTransaction
</#if> <#-- hasAppBar -->
import android.<#if appCompat>support.v4.</#if>app.Fragment
<#if hasViewPager>
import android.<#if appCompat>support.v4.</#if>app.FragmentManager
import android.support.${(appCompat)?string('v4','v13')}.app.FragmentPagerAdapter
import android.support.v4.view.ViewPager
</#if>
import android.os.Bundle
import android.view.LayoutInflater
import android.view.Menu
import android.view.MenuItem
import android.view.View
import android.view.ViewGroup
<#if features == 'spinner'>
import android.widget.AdapterView
import android.widget.AdapterView.OnItemSelectedListener
import android.widget.ArrayAdapter
import android.content.Context
<#if buildApi gte 23>
import android.support.v7.widget.ThemedSpinnerAdapter
import android.content.res.Resources.Theme
<#else>
import android.graphics.Color
</#if>
</#if> <#-- features == 'spinner' -->
<#if applicationPackage??>
import ${applicationPackage}.R
</#if>
import kotlinx.android.synthetic.main.${layoutName}.*
import kotlinx.android.synthetic.main.${fragmentLayoutName}.view.*
<#if features == 'spinner'>
import kotlinx.android.synthetic.main.list_item.view.*
</#if>
class ${activityClass} : ${superClass}()<#if !hasAppBar && features == 'tabs'>, ActionBar.TabListener</#if> {
<#if hasViewPager>
/**
* The [android.support.v4.view.PagerAdapter] that will provide
* fragments for each of the sections. We use a
* {@link FragmentPagerAdapter} derivative, which will keep every
* loaded fragment in memory. If this becomes too memory intensive, it
* may be best to switch to a
* [android.support.${(appCompat)?string('v4','v13')}.app.FragmentStatePagerAdapter].
*/
private var mSectionsPagerAdapter: SectionsPagerAdapter? = null
</#if>
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.${layoutName})
<#if hasAppBar>
setSupportActionBar(toolbar)
</#if>
<#if parentActivityClass?has_content>
${kotlinActionBar}?.setDisplayHomeAsUpEnabled(true)
</#if>
<#if hasViewPager>
// Create the adapter that will return a fragment for each of the three
// primary sections of the activity.
mSectionsPagerAdapter = SectionsPagerAdapter(<#if Support?has_content>supportFragmentManager<#else>fragmentManager</#if>)
// Set up the ViewPager with the sections adapter.
container.adapter = mSectionsPagerAdapter
</#if>
<#if hasAppBar>
<#if features == 'tabs'>
container.addOnPageChangeListener(TabLayout.TabLayoutOnPageChangeListener(tabs))
tabs.addOnTabSelectedListener(TabLayout.ViewPagerOnTabSelectedListener(container))
<#elseif features == 'spinner'>
${kotlinActionBar}?.setDisplayShowTitleEnabled(false)
// Setup spinner
spinner.adapter = MyAdapter(
toolbar.context,
arrayOf("Section 1", "Section 2", "Section 3"))
spinner.onItemSelectedListener = object : OnItemSelectedListener {
override fun onItemSelected(parent: AdapterView<*>, view: View?, position: Int, id: Long) {
// When the given dropdown item is selected, show its contents in the
// container view.
<#if Support?has_content>supportFragmentManager<#else>fragmentManager</#if>.beginTransaction()
.replace(R.id.container, PlaceholderFragment.newInstance(position + 1))
.commit()
}
override fun onNothingSelected(parent: AdapterView<*>) {}
}
</#if>
fab.setOnClickListener { view ->
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show()
}
<#else> <#-- hasAppBar -->
<#if features == 'tabs'>
${kotlinActionBar}?.navigationMode = ActionBar.NAVIGATION_MODE_TABS
// When swiping between different sections, select the corresponding
// tab. We can also use ActionBar.Tab#select() to do this if we have
// a reference to the Tab.
container.setOnPageChangeListener(object : ViewPager.SimpleOnPageChangeListener() {
override fun onPageSelected(position: Int) {
${kotlinActionBar}?.setSelectedNavigationItem(position)
}
})
mSectionsPagerAdapter?.let {
// For each of the sections in the app, add a tab to the action bar.
for (i in 0 until it.count) {
// Create a tab with text corresponding to the page title defined by
// the adapter. Also specify this Activity object, which implements
// the TabListener interface, as the callback (listener) for when
// this tab is selected.
actionBar.addTab(
actionBar.newTab()
.setText(it.getPageTitle(i))
.setTabListener(this))
}
}
</#if>
</#if> <#-- hasAppBar -->
}
<#include "include_options_menu.kt.ftl">
<#if !hasAppBar && features == 'tabs'>
override fun onTabSelected(tab: ActionBar.Tab, fragmentTransaction: FragmentTransaction) {
// When the given tab is selected, switch to the corresponding page in
// the ViewPager.
container.currentItem = tab.position
}
override fun onTabUnselected(tab: ActionBar.Tab, fragmentTransaction: FragmentTransaction) {}
override fun onTabReselected(tab: ActionBar.Tab, fragmentTransaction: FragmentTransaction) {}
</#if>
<#if features == 'spinner'>
<#if buildApi gte 23>
private class MyAdapter(context: Context, objects: Array<String>) : ArrayAdapter<String>(context, R.layout.list_item, objects), ThemedSpinnerAdapter {
private val mDropDownHelper: ThemedSpinnerAdapter.Helper = ThemedSpinnerAdapter.Helper(context)
override fun getDropDownView(position: Int, convertView: View?, parent: ViewGroup): View {
val view: View
if (convertView == null) {
// Inflate the drop down using the helper's LayoutInflater
val inflater = mDropDownHelper.dropDownViewInflater
view = inflater.inflate(R.layout.list_item, parent, false)
} else {
view = convertView
}
view.text1.text = getItem(position)
return view
}
override fun getDropDownViewTheme(): Theme? {
return mDropDownHelper.dropDownViewTheme
}
override fun setDropDownViewTheme(theme: Theme?) {
mDropDownHelper.dropDownViewTheme = theme
}
}
<#else> <#-- buildApi gte 23 -->
private class MyAdapter(context: Context, objects: Array<String>) :
ArrayAdapter<String>(context, R.layout.list_item, R.id.text1, objects) {
override fun getDropDownView(position: Int, convertView: View?, parent: ViewGroup): View {
val view = super.getView(position, convertView, parent)
// Hack. Use BuildVersion 23 for a better approach.
view.text1.setTextColor(Color.BLACK)
view.text1.setBackgroundColor(Color.WHITE)
return view
}
}
</#if>
</#if> <#-- features == 'spinner' -->
<#if hasViewPager>
/**
* A [FragmentPagerAdapter] that returns a fragment corresponding to
* one of the sections/tabs/pages.
*/
inner class SectionsPagerAdapter(fm: FragmentManager) : FragmentPagerAdapter(fm) {
override fun getItem(position: Int): Fragment {
// getItem is called to instantiate the fragment for the given page.
// Return a PlaceholderFragment (defined as a static inner class below).
return PlaceholderFragment.newInstance(position + 1)
}
override fun getCount(): Int {
// Show 3 total pages.
return 3
}
<#if !appCompat>
override fun getPageTitle(position: Int): CharSequence? {
when (position) {
0 -> return "SECTION 1"
1 -> return "SECTION 2"
2 -> return "SECTION 3"
}
return null
}
</#if>
}
</#if>
<#include "include_fragment.kt.ftl">
}