diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 1be47a5..d9008aa 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -24,15 +24,15 @@ - - - diff --git a/app/src/main/java/com/finnmglas/launcher/MainActivity.kt b/app/src/main/java/com/finnmglas/launcher/MainActivity.kt index 44edd15..3768a38 100644 --- a/app/src/main/java/com/finnmglas/launcher/MainActivity.kt +++ b/app/src/main/java/com/finnmglas/launcher/MainActivity.kt @@ -11,8 +11,9 @@ import android.view.* import androidx.appcompat.app.AppCompatActivity import androidx.core.view.GestureDetectorCompat import androidx.recyclerview.widget.RecyclerView -import com.finnmglas.launcher.choose.AppsRecyclerAdapter +import com.finnmglas.launcher.choose.apps.AppsRecyclerAdapter import com.finnmglas.launcher.extern.* +import com.finnmglas.launcher.tutorial.TutorialActivity import kotlinx.android.synthetic.main.activity_main.* import java.text.SimpleDateFormat import java.util.* @@ -79,10 +80,15 @@ class MainActivity : AppCompatActivity(), showSettingsIcon() // As older APIs somehow do not recognize the xml defined onClick - activity_main_settings_icon.setOnClickListener() { openSettings() } + activity_main_settings_icon.setOnClickListener() { + openSettings(this) + overridePendingTransition(R.anim.bottom_up, android.R.anim.fade_out) + } // Load apps list first - speed up settings that way - AsyncTask.execute { viewAdapter = AppsRecyclerAdapter( this, "", "") } + AsyncTask.execute { viewAdapter = + AppsRecyclerAdapter(this, "", "") + } // First Startup if (!sharedPref.getBoolean("startedBefore", false)){ @@ -139,22 +145,17 @@ class MainActivity : AppCompatActivity(), clockTimer.cancel() } - private fun openSettings(){ - startActivity(Intent(this, SettingsActivity::class.java)) - overridePendingTransition(R.anim.bottom_up, android.R.anim.fade_out) - } - /** Touch- and Key-related functions to start activities */ override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean { if (keyCode == KeyEvent.KEYCODE_BACK) { if (settingsIconShown) hideSettingsIcon() } - else if (keyCode == KeyEvent.KEYCODE_VOLUME_UP) launchApp(volumeUpApp, this) - else if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) launchApp(volumeDownApp, this) + else if (keyCode == KeyEvent.KEYCODE_VOLUME_UP) launch(volumeUpApp, this) + else if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) launch(volumeDownApp, this) return true } - fun dateViewOnTouch(v: View) { launchApp(calendarApp, this) } - fun timeViewOnTouch(v: View) { launchApp(clockApp, this) } + fun dateViewOnTouch(v: View) { launch(calendarApp, this) } + fun timeViewOnTouch(v: View) { launch(clockApp, this) } override fun onFling(e1: MotionEvent, e2: MotionEvent, dX: Float, dY: Float): Boolean { @@ -167,21 +168,24 @@ class MainActivity : AppCompatActivity(), val strictness = 4 // how distinguished the swipe has to be to be accepted // Only open if the swipe was not from the phones top edge - if (diffY < -height / 8 && abs(diffY) > strictness * abs(diffX) && e1.y > 100) launchApp(downApp, this) - else if (diffY > height / 8 && abs(diffY) > strictness * abs(diffX)) launchApp(upApp, this) - else if (diffX > width / 4 && abs(diffX) > strictness * abs(diffY)) launchApp(leftApp, this) - else if (diffX < -width / 4 && abs(diffX) > strictness * abs(diffY)) launchApp(rightApp, this) + if (diffY < -height / 8 && abs(diffY) > strictness * abs(diffX) && e1.y > 100) launch(downApp, this) + else if (diffY > height / 8 && abs(diffY) > strictness * abs(diffX)) { + launch(upApp, this) + overridePendingTransition(R.anim.bottom_up, android.R.anim.fade_out) + } + else if (diffX > width / 4 && abs(diffX) > strictness * abs(diffY)) launch(leftApp, this) + else if (diffX < -width / 4 && abs(diffX) > strictness * abs(diffY)) launch(rightApp, this) return true } override fun onLongPress(event: MotionEvent) { - if(longClickApp != "") launchApp(longClickApp, this) - else openSettings() + if(longClickApp != "") launch(longClickApp, this) + else openSettings(this) } override fun onDoubleTap(event: MotionEvent): Boolean { - launchApp(doubleClickApp, this) + launch(doubleClickApp, this) return false } @@ -213,7 +217,7 @@ class MainActivity : AppCompatActivity(), settingsIconShown = false } - fun settingsIconOnTouch(view: View){ openSettings() } + fun settingsIconOnTouch(view: View){ openSettings(this) } override fun onTouchEvent(event: MotionEvent): Boolean { return if (mDetector.onTouchEvent(event)) { false } else { super.onTouchEvent(event) } diff --git a/app/src/main/java/com/finnmglas/launcher/ChooseActivity.kt b/app/src/main/java/com/finnmglas/launcher/choose/ChooseActivity.kt similarity index 72% rename from app/src/main/java/com/finnmglas/launcher/ChooseActivity.kt rename to app/src/main/java/com/finnmglas/launcher/choose/ChooseActivity.kt index 7c1c533..f582dc2 100644 --- a/app/src/main/java/com/finnmglas/launcher/ChooseActivity.kt +++ b/app/src/main/java/com/finnmglas/launcher/choose/ChooseActivity.kt @@ -1,4 +1,4 @@ -package com.finnmglas.launcher +package com.finnmglas.launcher.choose import android.app.Activity import android.content.Intent @@ -7,13 +7,20 @@ import android.view.View import android.view.WindowManager import android.widget.Toast import androidx.appcompat.app.AppCompatActivity -import androidx.recyclerview.widget.LinearLayoutManager -import com.finnmglas.launcher.choose.AppsRecyclerAdapter +import androidx.viewpager.widget.ViewPager +import com.finnmglas.launcher.R import com.finnmglas.launcher.extern.* +import com.finnmglas.launcher.settings.intendedSettingsPause +import com.google.android.material.tabs.TabLayout import kotlinx.android.synthetic.main.activity_choose.* var intendedChoosePause = false // know when to close +// TODO: Better solution for this (used in choose-fragments) +var action = "view" +var forApp = "" + + class ChooseActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { @@ -42,24 +49,27 @@ class ChooseActivity : AppCompatActivity() { // get info about which action this activity is open for val bundle = intent.extras - val action = bundle!!.getString("action") // why choose an app - val forApp = bundle.getString("forApp") // which app we choose + if (bundle != null) { + action = bundle.getString("action")!! // why choose an app + if (action != "view") + forApp = bundle.getString("forApp")!! // which app we choose + } + + // Hide tabs for the "view" action + if (action == "view") { + activity_choose_tabs.visibility = View.GONE + } when (action) { "view" -> activity_choose_heading.text = getString(R.string.choose_title_view) "pick" -> activity_choose_heading.text = getString(R.string.choose_title) } - // set up the list / recycler - viewManager = LinearLayoutManager(this) - viewAdapter = AppsRecyclerAdapter( this, action, forApp) - - activity_choose_apps_recycler_view.apply { - // improve performance (since content changes don't change the layout size) - setHasFixedSize(true) - layoutManager = viewManager - adapter = viewAdapter - } + val sectionsPagerAdapter = ChooseSectionsPagerAdapter(this, supportFragmentManager) + val viewPager: ViewPager = findViewById(R.id.activity_choose_view_pager) + viewPager.adapter = sectionsPagerAdapter + val tabs: TabLayout = findViewById(R.id.activity_choose_tabs) + tabs.setupWithViewPager(viewPager) } override fun onPause() { diff --git a/app/src/main/java/com/finnmglas/launcher/choose/ChooseSectionsPagerAdapter.kt b/app/src/main/java/com/finnmglas/launcher/choose/ChooseSectionsPagerAdapter.kt new file mode 100644 index 0000000..62563b6 --- /dev/null +++ b/app/src/main/java/com/finnmglas/launcher/choose/ChooseSectionsPagerAdapter.kt @@ -0,0 +1,38 @@ +package com.finnmglas.launcher.choose + +import android.content.Context +import androidx.fragment.app.Fragment +import androidx.fragment.app.FragmentManager +import androidx.fragment.app.FragmentPagerAdapter +import com.finnmglas.launcher.* +import com.finnmglas.launcher.choose.apps.ChooseFragmentApps +import com.finnmglas.launcher.choose.other.ChooseFragmentOther + +private val TAB_TITLES = arrayOf( + R.string.choose_tab_app, + R.string.choose_tab_other +) + +/** Returns the fragment corresponding to the selected tab.*/ +class ChooseSectionsPagerAdapter(private val context: Context, fm: FragmentManager) + : FragmentPagerAdapter(fm, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) { + + override fun getItem(position: Int): Fragment { + return when (position){ + 0 -> ChooseFragmentApps() + 1 -> ChooseFragmentOther() + else -> Fragment() + } + } + + override fun getPageTitle(position: Int): CharSequence? { + return context.resources.getString(TAB_TITLES[position]) + } + + override fun getCount(): Int { + return when (action) { + "view" -> 1 + else -> 2 + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/finnmglas/launcher/choose/AppInfo.kt b/app/src/main/java/com/finnmglas/launcher/choose/apps/AppInfo.kt similarity index 82% rename from app/src/main/java/com/finnmglas/launcher/choose/AppInfo.kt rename to app/src/main/java/com/finnmglas/launcher/choose/apps/AppInfo.kt index 4221dad..9de1cdd 100644 --- a/app/src/main/java/com/finnmglas/launcher/choose/AppInfo.kt +++ b/app/src/main/java/com/finnmglas/launcher/choose/apps/AppInfo.kt @@ -1,4 +1,4 @@ -package com.finnmglas.launcher.choose +package com.finnmglas.launcher.choose.apps import android.graphics.drawable.Drawable diff --git a/app/src/main/java/com/finnmglas/launcher/choose/AppsRecyclerAdapter.kt b/app/src/main/java/com/finnmglas/launcher/choose/apps/AppsRecyclerAdapter.kt similarity index 93% rename from app/src/main/java/com/finnmglas/launcher/choose/AppsRecyclerAdapter.kt rename to app/src/main/java/com/finnmglas/launcher/choose/apps/AppsRecyclerAdapter.kt index 6179ea3..a365086 100644 --- a/app/src/main/java/com/finnmglas/launcher/choose/AppsRecyclerAdapter.kt +++ b/app/src/main/java/com/finnmglas/launcher/choose/apps/AppsRecyclerAdapter.kt @@ -1,4 +1,4 @@ -package com.finnmglas.launcher.choose +package com.finnmglas.launcher.choose.apps import android.app.Activity import android.content.Context @@ -14,7 +14,7 @@ import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.finnmglas.launcher.R import com.finnmglas.launcher.extern.* -import com.finnmglas.launcher.intendedChoosePause +import com.finnmglas.launcher.choose.intendedChoosePause class AppsRecyclerAdapter(val activity: Activity, val action: String?, val forApp: String?): RecyclerView.Adapter() { @@ -73,6 +73,10 @@ class AppsRecyclerAdapter(val activity: Activity, val action: String?, val forAp viewHolder.menuDots.setOnLongClickListener{ showOptionsPopup(viewHolder, appPackageName) } viewHolder.textView.setOnLongClickListener{ showOptionsPopup(viewHolder, appPackageName) } viewHolder.img.setOnLongClickListener{ showOptionsPopup(viewHolder, appPackageName) } + + // ensure onClicks are actually caught + viewHolder.textView.setOnClickListener{ viewHolder.onClick(viewHolder.textView) } + viewHolder.img.setOnClickListener{ viewHolder.onClick(viewHolder.img) } } } diff --git a/app/src/main/java/com/finnmglas/launcher/choose/apps/ChooseFragmentApps.kt b/app/src/main/java/com/finnmglas/launcher/choose/apps/ChooseFragmentApps.kt new file mode 100644 index 0000000..b7e6dee --- /dev/null +++ b/app/src/main/java/com/finnmglas/launcher/choose/apps/ChooseFragmentApps.kt @@ -0,0 +1,52 @@ +package com.finnmglas.launcher.choose.apps + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.fragment.app.Fragment +import androidx.recyclerview.widget.LinearLayoutManager +import com.finnmglas.launcher.R +import com.finnmglas.launcher.choose.action +import com.finnmglas.launcher.extern.* +import com.finnmglas.launcher.choose.forApp +import kotlinx.android.synthetic.main.fragment_choose_apps.* + + +/** The 'Apps' Tab associated Fragment in the Chooser */ + +class ChooseFragmentApps : Fragment() { + + /** Lifecycle functions */ + + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { + return inflater.inflate(R.layout.fragment_choose_apps, container, false) + } + + override fun onStart() { + super.onStart() + + if (getSavedTheme(context!!) == "custom") { + fragment_choose_apps_container.setBackgroundColor(dominantColor) + } + + // set up the list / recycler + val viewManager = LinearLayoutManager(context) + val viewAdapter = AppsRecyclerAdapter( + activity!!, + action, + forApp + ) + + fragment_choose_apps_recycler_view.apply { + // improve performance (since content changes don't change the layout size) + setHasFixedSize(true) + layoutManager = viewManager + adapter = viewAdapter + } + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/finnmglas/launcher/choose/other/ChooseFragmentOther.kt b/app/src/main/java/com/finnmglas/launcher/choose/other/ChooseFragmentOther.kt new file mode 100644 index 0000000..6e1d55c --- /dev/null +++ b/app/src/main/java/com/finnmglas/launcher/choose/other/ChooseFragmentOther.kt @@ -0,0 +1,45 @@ +package com.finnmglas.launcher.choose.other + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.fragment.app.Fragment +import androidx.recyclerview.widget.LinearLayoutManager +import com.finnmglas.launcher.R +import com.finnmglas.launcher.extern.dominantColor +import com.finnmglas.launcher.extern.getSavedTheme +import kotlinx.android.synthetic.main.fragment_choose_other.* + +/** The 'Other' Tab associated Fragment in the Chooser */ + +class ChooseFragmentOther : Fragment() { + + /** Lifecycle functions */ + + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { + return inflater.inflate(R.layout.fragment_choose_other, container, false) + } + + override fun onStart() { + if (getSavedTheme(context!!) == "custom") { + fragment_choose_other_container.setBackgroundColor(dominantColor) + } + + // set up the list / recycler + val viewManager = LinearLayoutManager(context) + val viewAdapter = OtherRecyclerAdapter(activity!!) + + fragment_choose_other_recycler_view.apply { + // improve performance (since content changes don't change the layout size) + setHasFixedSize(true) + layoutManager = viewManager + adapter = viewAdapter + } + + super.onStart() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/finnmglas/launcher/choose/other/OtherInfo.kt b/app/src/main/java/com/finnmglas/launcher/choose/other/OtherInfo.kt new file mode 100644 index 0000000..e93c275 --- /dev/null +++ b/app/src/main/java/com/finnmglas/launcher/choose/other/OtherInfo.kt @@ -0,0 +1,7 @@ +package com.finnmglas.launcher.choose.other + +class OtherInfo(label: String, data: String, icon: String) { + var label: CharSequence? = label + var data: CharSequence? = data + var icon: CharSequence? = icon +} \ No newline at end of file diff --git a/app/src/main/java/com/finnmglas/launcher/choose/other/OtherRecyclerAdapter.kt b/app/src/main/java/com/finnmglas/launcher/choose/other/OtherRecyclerAdapter.kt new file mode 100644 index 0000000..36ab5dc --- /dev/null +++ b/app/src/main/java/com/finnmglas/launcher/choose/other/OtherRecyclerAdapter.kt @@ -0,0 +1,72 @@ +package com.finnmglas.launcher.choose.other + +import android.app.Activity +import android.content.Intent +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.finnmglas.launcher.R +import com.finnmglas.launcher.extern.* +import com.finnmglas.launcher.choose.forApp + +/* Will only be used if an app / action is picked */ +class OtherRecyclerAdapter(val activity: Activity): + RecyclerView.Adapter() { + + private val othersList: MutableList + + inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), + View.OnClickListener { + var textView: TextView = itemView.findViewById(R.id.row_other_name) + var iconView: FontAwesome = itemView.findViewById(R.id.row_other_fa_icon) + + + override fun onClick(v: View) { + val pos = adapterPosition + val content = othersList[pos] + + returnChoiceIntent(forApp, content.data.toString()) + } + + init { itemView.setOnClickListener(this) } + } + + override fun onBindViewHolder(viewHolder: ViewHolder, i: Int) { + val otherLabel = othersList[i].label.toString() + val icon = othersList[i].icon.toString() + + viewHolder.textView.text = otherLabel + viewHolder.iconView.text = icon + } + + override fun getItemCount(): Int { return othersList.size } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { + val inflater = LayoutInflater.from(parent.context) + val view: View = inflater.inflate(R.layout.recycler_other_row, parent, false) + return ViewHolder(view) + } + + init { + othersList = ArrayList() + othersList.add( + OtherInfo("Launcher Settings", + "launcher:settings", + activity.getString(R.string.fas_settings))) + othersList.add( + OtherInfo("Launcher AppsList", + "launcher:choose", + activity.getString(R.string.fas_bars))) + } + + /* */ + private fun returnChoiceIntent(forAction: String, value: String) { + val returnIntent = Intent() + returnIntent.putExtra("value", value) + returnIntent.putExtra("forApp", forApp) + activity.setResult(REQUEST_CHOOSE_APP, returnIntent) + activity.finish() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/finnmglas/launcher/extern/Functions.kt b/app/src/main/java/com/finnmglas/launcher/extern/Functions.kt index f32759d..f079f5b 100644 --- a/app/src/main/java/com/finnmglas/launcher/extern/Functions.kt +++ b/app/src/main/java/com/finnmglas/launcher/extern/Functions.kt @@ -17,7 +17,10 @@ import android.view.animation.* import android.widget.Button import android.widget.ImageView import android.widget.Toast +import com.finnmglas.launcher.choose.ChooseActivity import com.finnmglas.launcher.R +import com.finnmglas.launcher.settings.SettingsActivity +import com.finnmglas.launcher.settings.intendedSettingsPause import kotlin.math.roundToInt @@ -134,16 +137,22 @@ private fun getIntent(packageName: String, context: Context): Intent? { return intent } +// select what to launch +fun launch(data: String, activity: Activity) { + if (data.startsWith("launcher:")) // [type]:[info] + when(data.split(":")[1]) { + "settings" -> openSettings(activity) + "choose" -> openAppsList(activity) + } + else launchApp(data, activity) // app + +} + fun launchApp(packageName: String, context: Context) { - val intent = - getIntent(packageName, context) + val intent = getIntent(packageName, context) if (intent != null) { context.startActivity(intent) - - if (context is Activity) { - context.overridePendingTransition(0, 0) - } } else { if (isInstalled(packageName, context)){ @@ -203,6 +212,17 @@ fun openAppSettings(pkg :String, context:Context){ context.startActivity(intent) } +fun openSettings(activity: Activity){ + activity.startActivity(Intent(activity, SettingsActivity::class.java)) +} + +fun openAppsList(activity: Activity){ + val intent = Intent(activity, ChooseActivity::class.java) + intent.putExtra("action", "view") + intendedSettingsPause = true + activity.startActivity(intent) +} + fun loadSettings(sharedPref : SharedPreferences){ upApp = sharedPref.getString("action_upApp", "").toString() downApp = sharedPref.getString("action_downApp", "").toString() diff --git a/app/src/main/java/com/finnmglas/launcher/SettingsActivity.kt b/app/src/main/java/com/finnmglas/launcher/settings/SettingsActivity.kt similarity index 94% rename from app/src/main/java/com/finnmglas/launcher/SettingsActivity.kt rename to app/src/main/java/com/finnmglas/launcher/settings/SettingsActivity.kt index eca175f..192bb39 100644 --- a/app/src/main/java/com/finnmglas/launcher/SettingsActivity.kt +++ b/app/src/main/java/com/finnmglas/launcher/settings/SettingsActivity.kt @@ -1,4 +1,4 @@ -package com.finnmglas.launcher +package com.finnmglas.launcher.settings import android.content.Context import android.content.Intent @@ -9,8 +9,8 @@ import android.view.View import android.view.WindowManager import androidx.appcompat.app.AppCompatActivity import androidx.viewpager.widget.ViewPager +import com.finnmglas.launcher.R import com.finnmglas.launcher.extern.* -import com.finnmglas.launcher.settings.SectionsPagerAdapter import com.google.android.material.tabs.TabLayout import kotlinx.android.synthetic.main.activity_settings.* @@ -36,7 +36,7 @@ class SettingsActivity : AppCompatActivity() { window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN) window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) - val sectionsPagerAdapter = SectionsPagerAdapter(this, supportFragmentManager) + val sectionsPagerAdapter = SettingsSectionsPagerAdapter(this, supportFragmentManager) val viewPager: ViewPager = findViewById(R.id.activity_settings_view_pager) viewPager.adapter = sectionsPagerAdapter val tabs: TabLayout = findViewById(R.id.activity_settings_tabs) diff --git a/app/src/main/java/com/finnmglas/launcher/settings/SettingsSectionsPagerAdapter.kt b/app/src/main/java/com/finnmglas/launcher/settings/SettingsSectionsPagerAdapter.kt index 2b304ef..a539f2b 100644 --- a/app/src/main/java/com/finnmglas/launcher/settings/SettingsSectionsPagerAdapter.kt +++ b/app/src/main/java/com/finnmglas/launcher/settings/SettingsSectionsPagerAdapter.kt @@ -5,6 +5,9 @@ import androidx.fragment.app.Fragment import androidx.fragment.app.FragmentManager import androidx.fragment.app.FragmentPagerAdapter import com.finnmglas.launcher.* +import com.finnmglas.launcher.settings.actions.SettingsFragmentApps +import com.finnmglas.launcher.settings.meta.SettingsFragmentMeta +import com.finnmglas.launcher.settings.theme.SettingsFragmentTheme private val TAB_TITLES = arrayOf( R.string.settings_tab_app, @@ -13,7 +16,7 @@ private val TAB_TITLES = arrayOf( ) /** Returns the fragment corresponding to the selected tab.*/ -class SectionsPagerAdapter(private val context: Context, fm: FragmentManager) +class SettingsSectionsPagerAdapter(private val context: Context, fm: FragmentManager) : FragmentPagerAdapter(fm, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) { override fun getItem(position: Int): Fragment { diff --git a/app/src/main/java/com/finnmglas/launcher/settings/actions/ActionsRecyclerAdapter.kt b/app/src/main/java/com/finnmglas/launcher/settings/actions/ActionsRecyclerAdapter.kt index c386266..68649fe 100644 --- a/app/src/main/java/com/finnmglas/launcher/settings/actions/ActionsRecyclerAdapter.kt +++ b/app/src/main/java/com/finnmglas/launcher/settings/actions/ActionsRecyclerAdapter.kt @@ -11,11 +11,11 @@ import android.widget.Button import android.widget.ImageView import android.widget.TextView import androidx.recyclerview.widget.RecyclerView -import com.finnmglas.launcher.ChooseActivity +import com.finnmglas.launcher.choose.ChooseActivity import com.finnmglas.launcher.R import com.finnmglas.launcher.extern.FontAwesome import com.finnmglas.launcher.extern.* -import com.finnmglas.launcher.intendedSettingsPause +import com.finnmglas.launcher.settings.intendedSettingsPause import java.lang.Exception @@ -27,6 +27,7 @@ class ActionsRecyclerAdapter(val activity: Activity): inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), View.OnClickListener { var textView: TextView = itemView.findViewById(R.id.row_action_name) + var fontAwesome: FontAwesome = itemView.findViewById(R.id.row_app_fa_icon) var img: ImageView = itemView.findViewById(R.id.row_app_icon) as ImageView var chooseButton: Button = itemView.findViewById(R.id.row_choose_button) var removeAction: FontAwesome = itemView.findViewById(R.id.row_remove_action) @@ -48,20 +49,44 @@ class ActionsRecyclerAdapter(val activity: Activity): val content = actionsList[i].content viewHolder.textView.text = actionText - try { - viewHolder.img.setImageDrawable(activity.packageManager.getApplicationIcon(content.toString())) - viewHolder.img.setOnClickListener{ chooseApp(actionName.toString()) } - if (getSavedTheme(activity) == "dark") transformGrayscale(viewHolder.img) + viewHolder.removeAction.setOnClickListener{ + val sharedPref = activity.getSharedPreferences( + activity.getString(R.string.preference_file_key), Context.MODE_PRIVATE) - viewHolder.removeAction.setOnClickListener{ - val sharedPref = activity.getSharedPreferences( - activity.getString(R.string.preference_file_key), Context.MODE_PRIVATE) + val editor : SharedPreferences.Editor = sharedPref.edit() + editor.putString("action_$actionName", "") // clear it + editor.apply() - val editor : SharedPreferences.Editor = sharedPref.edit() - editor.putString("action_$actionName", "") // clear it - editor.apply() + viewHolder.fontAwesome.visibility = View.INVISIBLE + viewHolder.img.visibility = View.INVISIBLE + viewHolder.removeAction.visibility = View.GONE + viewHolder.chooseButton.visibility = View.VISIBLE + viewHolder.chooseButton.setOnClickListener{ chooseApp(actionName.toString()) } + if (getSavedTheme(activity) =="custom") + setButtonColor(viewHolder.chooseButton, vibrantColor) + } + if (content!!.startsWith("launcher")) { + // Set fontAwesome icon + viewHolder.fontAwesome.visibility = View.VISIBLE + viewHolder.fontAwesome.setOnClickListener{ chooseApp(actionName.toString()) } + + when (content.split(":")[1]) { + "settings" -> + viewHolder.fontAwesome.text = activity.getString(R.string.fas_settings) + "choose" -> + viewHolder.fontAwesome.text = activity.getString(R.string.fas_bars) + } + } else { + // Set image icon (by packageName) + try { + viewHolder.img.setImageDrawable(activity.packageManager.getApplicationIcon(content.toString())) + viewHolder.img.setOnClickListener{ chooseApp(actionName.toString()) } + + if (getSavedTheme(activity) == "dark") transformGrayscale(viewHolder.img) + + } catch (e : Exception) { // the button is shown, user asked to select an action viewHolder.img.visibility = View.INVISIBLE viewHolder.removeAction.visibility = View.GONE viewHolder.chooseButton.visibility = View.VISIBLE @@ -69,14 +94,6 @@ class ActionsRecyclerAdapter(val activity: Activity): if (getSavedTheme(activity) =="custom") setButtonColor(viewHolder.chooseButton, vibrantColor) } - - } catch (e : Exception) { - viewHolder.img.visibility = View.INVISIBLE - viewHolder.removeAction.visibility = View.GONE - viewHolder.chooseButton.visibility = View.VISIBLE - viewHolder.chooseButton.setOnClickListener{ chooseApp(actionName.toString()) } - if (getSavedTheme(activity) =="custom") - setButtonColor(viewHolder.chooseButton, vibrantColor) } } diff --git a/app/src/main/java/com/finnmglas/launcher/settings/SettingsFragmentApps.kt b/app/src/main/java/com/finnmglas/launcher/settings/actions/SettingsFragmentApps.kt similarity index 89% rename from app/src/main/java/com/finnmglas/launcher/settings/SettingsFragmentApps.kt rename to app/src/main/java/com/finnmglas/launcher/settings/actions/SettingsFragmentApps.kt index b1914d8..b060540 100644 --- a/app/src/main/java/com/finnmglas/launcher/settings/SettingsFragmentApps.kt +++ b/app/src/main/java/com/finnmglas/launcher/settings/actions/SettingsFragmentApps.kt @@ -1,9 +1,7 @@ -package com.finnmglas.launcher.settings +package com.finnmglas.launcher.settings.actions import android.content.ActivityNotFoundException -import android.content.Context import android.content.Intent -import android.content.SharedPreferences import android.net.Uri import android.os.Bundle import android.view.LayoutInflater @@ -12,11 +10,10 @@ import android.view.ViewGroup import android.widget.Toast import androidx.fragment.app.Fragment import androidx.recyclerview.widget.LinearLayoutManager -import com.finnmglas.launcher.ChooseActivity +import com.finnmglas.launcher.choose.ChooseActivity import com.finnmglas.launcher.R import com.finnmglas.launcher.extern.* -import com.finnmglas.launcher.intendedSettingsPause -import com.finnmglas.launcher.settings.actions.ActionsRecyclerAdapter +import com.finnmglas.launcher.settings.intendedSettingsPause import kotlinx.android.synthetic.main.fragment_settings_apps.* diff --git a/app/src/main/java/com/finnmglas/launcher/settings/SettingsFragmentMeta.kt b/app/src/main/java/com/finnmglas/launcher/settings/meta/SettingsFragmentMeta.kt similarity index 97% rename from app/src/main/java/com/finnmglas/launcher/settings/SettingsFragmentMeta.kt rename to app/src/main/java/com/finnmglas/launcher/settings/meta/SettingsFragmentMeta.kt index ca193c9..73cc1d8 100644 --- a/app/src/main/java/com/finnmglas/launcher/settings/SettingsFragmentMeta.kt +++ b/app/src/main/java/com/finnmglas/launcher/settings/meta/SettingsFragmentMeta.kt @@ -1,4 +1,4 @@ -package com.finnmglas.launcher.settings +package com.finnmglas.launcher.settings.meta import android.app.AlertDialog import android.content.ActivityNotFoundException @@ -13,10 +13,10 @@ import androidx.fragment.app.Fragment import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import com.finnmglas.launcher.TutorialActivity +import com.finnmglas.launcher.tutorial.TutorialActivity import com.finnmglas.launcher.R import com.finnmglas.launcher.extern.* -import com.finnmglas.launcher.intendedSettingsPause +import com.finnmglas.launcher.settings.intendedSettingsPause import kotlinx.android.synthetic.main.fragment_settings_meta.* /** The 'Meta' Tab associated Fragment in Settings */ diff --git a/app/src/main/java/com/finnmglas/launcher/settings/SettingsFragmentTheme.kt b/app/src/main/java/com/finnmglas/launcher/settings/theme/SettingsFragmentTheme.kt similarity index 96% rename from app/src/main/java/com/finnmglas/launcher/settings/SettingsFragmentTheme.kt rename to app/src/main/java/com/finnmglas/launcher/settings/theme/SettingsFragmentTheme.kt index 8ed971e..bae4281 100644 --- a/app/src/main/java/com/finnmglas/launcher/settings/SettingsFragmentTheme.kt +++ b/app/src/main/java/com/finnmglas/launcher/settings/theme/SettingsFragmentTheme.kt @@ -1,4 +1,4 @@ -package com.finnmglas.launcher.settings +package com.finnmglas.launcher.settings.theme import android.Manifest import android.content.Context @@ -18,9 +18,7 @@ import androidx.core.content.ContextCompat import androidx.palette.graphics.Palette import com.finnmglas.launcher.R import com.finnmglas.launcher.extern.* -import com.finnmglas.launcher.intendedSettingsPause -import kotlinx.android.synthetic.main.activity_main.* -import kotlinx.android.synthetic.main.activity_settings.* +import com.finnmglas.launcher.settings.intendedSettingsPause import kotlinx.android.synthetic.main.fragment_settings_theme.* /** The 'Theme' Tab associated Fragment in Settings */ diff --git a/app/src/main/java/com/finnmglas/launcher/TutorialActivity.kt b/app/src/main/java/com/finnmglas/launcher/tutorial/TutorialActivity.kt similarity index 98% rename from app/src/main/java/com/finnmglas/launcher/TutorialActivity.kt rename to app/src/main/java/com/finnmglas/launcher/tutorial/TutorialActivity.kt index 871a635..4c47ec2 100644 --- a/app/src/main/java/com/finnmglas/launcher/TutorialActivity.kt +++ b/app/src/main/java/com/finnmglas/launcher/tutorial/TutorialActivity.kt @@ -1,4 +1,4 @@ -package com.finnmglas.launcher +package com.finnmglas.launcher.tutorial import android.content.Context import android.content.SharedPreferences @@ -6,6 +6,7 @@ import android.os.Bundle import android.util.TypedValue import android.view.* import androidx.appcompat.app.AppCompatActivity +import com.finnmglas.launcher.R import com.finnmglas.launcher.extern.* import kotlinx.android.synthetic.main.activity_tutorial.* diff --git a/app/src/main/res/anim/bottom_up.xml b/app/src/main/res/anim/bottom_up.xml index 7832abf..1a128eb 100644 --- a/app/src/main/res/anim/bottom_up.xml +++ b/app/src/main/res/anim/bottom_up.xml @@ -5,6 +5,6 @@ android:fromYDelta="75%p" android:toYDelta="0%p" android:interpolator="@android:anim/decelerate_interpolator" - android:duration="150"/> + android:duration="100"/> \ No newline at end of file diff --git a/app/src/main/res/layout/activity_choose.xml b/app/src/main/res/layout/activity_choose.xml index eb68a91..71d2f98 100644 --- a/app/src/main/res/layout/activity_choose.xml +++ b/app/src/main/res/layout/activity_choose.xml @@ -7,7 +7,7 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:background="?attr/colorPrimary" - tools:context=".ChooseActivity"> + tools:context=".choose.ChooseActivity"> + + - + app:layout_constraintTop_toBottomOf="@id/activity_choose_app_bar" + custom:layout_behavior="@string/appbar_scrolling_view_behavior" /> \ No newline at end of file diff --git a/app/src/main/res/layout/activity_settings.xml b/app/src/main/res/layout/activity_settings.xml index 5e700e1..d99aa5a 100644 --- a/app/src/main/res/layout/activity_settings.xml +++ b/app/src/main/res/layout/activity_settings.xml @@ -7,7 +7,7 @@ android:id="@+id/activity_settings_container" android:layout_width="match_parent" android:layout_height="match_parent" - tools:context=".SettingsActivity"> + tools:context=".settings.SettingsActivity"> + tools:context=".tutorial.TutorialActivity"> + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_choose_other.xml b/app/src/main/res/layout/fragment_choose_other.xml new file mode 100644 index 0000000..56b9c62 --- /dev/null +++ b/app/src/main/res/layout/fragment_choose_other.xml @@ -0,0 +1,33 @@ + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_settings_apps.xml b/app/src/main/res/layout/fragment_settings_apps.xml index 6ffb3c8..f2c59f6 100644 --- a/app/src/main/res/layout/fragment_settings_apps.xml +++ b/app/src/main/res/layout/fragment_settings_apps.xml @@ -11,7 +11,7 @@ android:paddingLeft="32sp" android:paddingTop="16sp" android:paddingRight="32sp" - tools:context=".settings.SettingsFragmentApps"> + tools:context=".settings.actions.SettingsFragmentApps"> + tools:context=".settings.meta.SettingsFragmentMeta">