diff options
Diffstat (limited to 'app/src/main/kotlin/com/pitchedapps/frost/activities')
4 files changed, 161 insertions, 9 deletions
diff --git a/app/src/main/kotlin/com/pitchedapps/frost/activities/BaseActivity.kt b/app/src/main/kotlin/com/pitchedapps/frost/activities/BaseActivity.kt index 97afd480..6ab65399 100644 --- a/app/src/main/kotlin/com/pitchedapps/frost/activities/BaseActivity.kt +++ b/app/src/main/kotlin/com/pitchedapps/frost/activities/BaseActivity.kt @@ -2,6 +2,7 @@ package com.pitchedapps.frost.activities import android.content.res.Configuration import android.os.Bundle +import android.transition.Fade import ca.allanwang.kau.internal.KauBaseActivity import ca.allanwang.kau.searchview.SearchViewHolder import com.pitchedapps.frost.contracts.VideoViewHolder @@ -28,6 +29,7 @@ abstract class BaseActivity : KauBaseActivity() { super.onCreate(savedInstanceState) if (this !is WebOverlayActivityBase) setFrostTheme() } + // // private var networkDisposable: Disposable? = null // private var networkConsumer: ((Connectivity) -> Unit)? = null diff --git a/app/src/main/kotlin/com/pitchedapps/frost/activities/MainActivity.kt b/app/src/main/kotlin/com/pitchedapps/frost/activities/MainActivity.kt index 57cda44a..1ba7f4c3 100644 --- a/app/src/main/kotlin/com/pitchedapps/frost/activities/MainActivity.kt +++ b/app/src/main/kotlin/com/pitchedapps/frost/activities/MainActivity.kt @@ -49,6 +49,7 @@ import com.pitchedapps.frost.contracts.ActivityWebContract import com.pitchedapps.frost.contracts.FileChooserContract import com.pitchedapps.frost.contracts.FileChooserDelegate import com.pitchedapps.frost.contracts.VideoViewHolder +import com.pitchedapps.frost.dbflow.TAB_COUNT import com.pitchedapps.frost.dbflow.loadFbCookie import com.pitchedapps.frost.dbflow.loadFbTabs import com.pitchedapps.frost.enums.MainActivityLayout @@ -134,7 +135,7 @@ class MainActivity : BaseActivity(), setSupportActionBar(toolbar) adapter = SectionsPagerAdapter(supportFragmentManager, loadFbTabs()) viewPager.adapter = adapter - viewPager.offscreenPageLimit = 5 + viewPager.offscreenPageLimit = TAB_COUNT viewPager.addOnPageChangeListener(object : ViewPager.SimpleOnPageChangeListener() { override fun onPageSelected(position: Int) { super.onPageSelected(position) diff --git a/app/src/main/kotlin/com/pitchedapps/frost/activities/SettingsActivity.kt b/app/src/main/kotlin/com/pitchedapps/frost/activities/SettingsActivity.kt index 293be694..f17ccf20 100644 --- a/app/src/main/kotlin/com/pitchedapps/frost/activities/SettingsActivity.kt +++ b/app/src/main/kotlin/com/pitchedapps/frost/activities/SettingsActivity.kt @@ -37,10 +37,16 @@ class SettingsActivity : KPrefActivity(), FrostBilling by IabSettings() { private const val REQUEST_RINGTONE = 0b10111 shl 5 const val REQUEST_NOTIFICATION_RINGTONE = REQUEST_RINGTONE or 1 const val REQUEST_MESSAGE_RINGTONE = REQUEST_RINGTONE or 2 + const val ACTIVITY_REQUEST_TABS = 29 } override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { if (fetchRingtone(requestCode, resultCode, data)) return + if (requestCode == ACTIVITY_REQUEST_TABS) { + if (resultCode == Activity.RESULT_OK) + shouldRestartMain() + return + } if (!onActivityResultBilling(requestCode, resultCode, data)) super.onActivityResult(requestCode, resultCode, data) reloadList() @@ -52,14 +58,22 @@ class SettingsActivity : KPrefActivity(), FrostBilling by IabSettings() { */ private fun fetchRingtone(requestCode: Int, resultCode: Int, data: Intent?): Boolean { if (requestCode and REQUEST_RINGTONE != REQUEST_RINGTONE || resultCode != Activity.RESULT_OK) return false - val uri: String = data?.getParcelableExtra<Uri>(RingtoneManager.EXTRA_RINGTONE_PICKED_URI)?.toString() ?: "" + val uri = data?.getParcelableExtra<Uri>(RingtoneManager.EXTRA_RINGTONE_PICKED_URI) + val uriString: String = uri?.toString() ?: "" + if (uri != null) { + try { + grantUriPermission("com.android.systemui", uri, Intent.FLAG_GRANT_READ_URI_PERMISSION) + } catch (e: Exception) { + L.e(e, "grantUriPermission") + } + } when (requestCode) { REQUEST_NOTIFICATION_RINGTONE -> { - Prefs.notificationRingtone = uri + Prefs.notificationRingtone = uriString reloadByTitle(R.string.notification_ringtone) } REQUEST_MESSAGE_RINGTONE -> { - Prefs.messageRingtone = uri + Prefs.messageRingtone = uriString reloadByTitle(R.string.message_ringtone) } } @@ -106,24 +120,28 @@ class SettingsActivity : KPrefActivity(), FrostBilling by IabSettings() { descRes = R.string.get_pro_desc iicon = GoogleMaterial.Icon.gmd_star visible = { !IS_FROST_PRO } - onClick = { _, _, _ -> restorePurchases(); true } + onClick = { restorePurchases() } } plainText(R.string.about_frost) { descRes = R.string.about_frost_desc iicon = GoogleMaterial.Icon.gmd_info - onClick = { _, _, _ -> startActivityForResult(AboutActivity::class.java, 9, true); true } + onClick = { + startActivityForResult(AboutActivity::class.java, 9, bundleBuilder = { + withSceneTransitionAnimation(this@SettingsActivity) + }) + } } plainText(R.string.help_translate) { descRes = R.string.help_translate_desc iicon = GoogleMaterial.Icon.gmd_translate - onClick = { _, _, _ -> startLink(R.string.translation_url); true } + onClick = { startLink(R.string.translation_url) } } plainText(R.string.replay_intro) { iicon = GoogleMaterial.Icon.gmd_replay - onClick = { _, _, _ -> launchIntroActivity(cookies()); true } + onClick = { launchIntroActivity(cookies()) } } subItems(R.string.debug_frost, getDebugPrefs()) { @@ -138,7 +156,7 @@ class SettingsActivity : KPrefActivity(), FrostBilling by IabSettings() { } fun KPrefItemBase.BaseContract<*>.dependsOnPro() { - onDisabledClick = { _, _, _ -> purchasePro(); true } + onDisabledClick = { purchasePro() } enabler = { IS_FROST_PRO } } diff --git a/app/src/main/kotlin/com/pitchedapps/frost/activities/TabCustomizerActivity.kt b/app/src/main/kotlin/com/pitchedapps/frost/activities/TabCustomizerActivity.kt new file mode 100644 index 00000000..bac352af --- /dev/null +++ b/app/src/main/kotlin/com/pitchedapps/frost/activities/TabCustomizerActivity.kt @@ -0,0 +1,131 @@ +package com.pitchedapps.frost.activities + +import android.app.Activity +import android.content.res.ColorStateList +import android.os.Bundle +import android.support.design.widget.FloatingActionButton +import android.support.v7.widget.GridLayoutManager +import android.support.v7.widget.RecyclerView +import android.support.v7.widget.helper.ItemTouchHelper +import android.view.View +import android.view.animation.AnimationUtils +import android.widget.TextView +import ca.allanwang.kau.kotlin.lazyContext +import ca.allanwang.kau.utils.bindView +import ca.allanwang.kau.utils.scaleXY +import ca.allanwang.kau.utils.setIcon +import ca.allanwang.kau.utils.withAlpha +import com.mikepenz.fastadapter.commons.adapters.FastItemAdapter +import com.mikepenz.fastadapter_extensions.drag.ItemTouchCallback +import com.mikepenz.fastadapter_extensions.drag.SimpleDragCallback +import com.mikepenz.google_material_typeface_library.GoogleMaterial +import com.pitchedapps.frost.R +import com.pitchedapps.frost.dbflow.TAB_COUNT +import com.pitchedapps.frost.dbflow.loadFbTabs +import com.pitchedapps.frost.dbflow.save +import com.pitchedapps.frost.facebook.FbItem +import com.pitchedapps.frost.iitems.TabIItem +import com.pitchedapps.frost.utils.Prefs +import com.pitchedapps.frost.utils.setFrostColors +import java.util.* + +/** + * Created by Allan Wang on 26/11/17. + */ +class TabCustomizerActivity : BaseActivity() { + + val toolbar: View by bindView(R.id.pseudo_toolbar) + val recycler: RecyclerView by bindView(R.id.tab_recycler) + val instructions: TextView by bindView(R.id.instructions) + val divider: View by bindView(R.id.divider) + val adapter = FastItemAdapter<TabIItem>() + val fabCancel: FloatingActionButton by bindView(R.id.fab_cancel) + val fabSave: FloatingActionButton by bindView(R.id.fab_save) + + private val wobble = lazyContext { AnimationUtils.loadAnimation(it, R.anim.rotate_delta) } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_tab_customizer) + + toolbar.setBackgroundColor(Prefs.headerColor) + + recycler.layoutManager = GridLayoutManager(this, TAB_COUNT, GridLayoutManager.VERTICAL, false) + recycler.adapter = adapter + recycler.setHasFixedSize(true) + + divider.setBackgroundColor(Prefs.textColor.withAlpha(30)) + instructions.setTextColor(Prefs.textColor) + + val tabs = loadFbTabs().toMutableList() + val remaining = FbItem.values().toMutableList() + remaining.removeAll(tabs) + tabs.addAll(remaining) + + adapter.add(tabs.map(::TabIItem)) + bindSwapper(adapter, recycler) + + adapter.withOnClickListener { view, _, _, _ -> view.wobble(); true } + + setResult(Activity.RESULT_CANCELED) + + fabSave.setIcon(GoogleMaterial.Icon.gmd_check, Prefs.iconColor) + fabSave.backgroundTintList = ColorStateList.valueOf(Prefs.accentColor) + fabSave.setOnClickListener { + adapter.adapterItems.subList(0, TAB_COUNT).map(TabIItem::item).save() + setResult(Activity.RESULT_OK) + finish() + } + fabCancel.setIcon(GoogleMaterial.Icon.gmd_close, Prefs.iconColor) + fabCancel.backgroundTintList = ColorStateList.valueOf(Prefs.accentColor) + fabCancel.setOnClickListener { finish() } + setFrostColors(themeWindow = true) + } + + private fun View.wobble() = startAnimation(wobble(context)) + + private fun bindSwapper(adapter: FastItemAdapter<*>, recycler: RecyclerView) { + val dragCallback = TabDragCallback(SimpleDragCallback.ALL, swapper(adapter)) + ItemTouchHelper(dragCallback).attachToRecyclerView(recycler) + } + + private fun swapper(adapter: FastItemAdapter<*>) = object : ItemTouchCallback { + override fun itemTouchOnMove(oldPosition: Int, newPosition: Int): Boolean { + Collections.swap(adapter.adapterItems, oldPosition, newPosition) + adapter.notifyAdapterDataSetChanged() + return true + } + + override fun itemTouchDropped(oldPosition: Int, newPosition: Int) = Unit + } + + + private class TabDragCallback( + directions: Int, itemTouchCallback: ItemTouchCallback + ) : SimpleDragCallback(directions, itemTouchCallback) { + + private var draggingView: TabIItem.ViewHolder? = null + + override fun onSelectedChanged(viewHolder: RecyclerView.ViewHolder?, actionState: Int) { + super.onSelectedChanged(viewHolder, actionState) + when (actionState) { + ItemTouchHelper.ACTION_STATE_DRAG -> { + (viewHolder as? TabIItem.ViewHolder)?.apply { + draggingView = this + itemView.animate().scaleXY(1.3f) + text.animate().alpha(0f) + } + } + ItemTouchHelper.ACTION_STATE_IDLE -> { + draggingView?.apply { + itemView.animate().scaleXY(1f) + text.animate().alpha(1f) + } + draggingView = null + } + } + } + + } + +} |