aboutsummaryrefslogtreecommitdiff
path: root/app/src/main/kotlin/com/pitchedapps/frost/activities
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main/kotlin/com/pitchedapps/frost/activities')
-rw-r--r--app/src/main/kotlin/com/pitchedapps/frost/activities/BaseMainActivity.kt68
-rw-r--r--app/src/main/kotlin/com/pitchedapps/frost/activities/ImageActivity.kt32
-rw-r--r--app/src/main/kotlin/com/pitchedapps/frost/activities/MainActivity.kt8
-rw-r--r--app/src/main/kotlin/com/pitchedapps/frost/activities/WebOverlayActivity.kt7
4 files changed, 65 insertions, 50 deletions
diff --git a/app/src/main/kotlin/com/pitchedapps/frost/activities/BaseMainActivity.kt b/app/src/main/kotlin/com/pitchedapps/frost/activities/BaseMainActivity.kt
index 3a01e05b..743ac474 100644
--- a/app/src/main/kotlin/com/pitchedapps/frost/activities/BaseMainActivity.kt
+++ b/app/src/main/kotlin/com/pitchedapps/frost/activities/BaseMainActivity.kt
@@ -67,8 +67,6 @@ import com.pitchedapps.frost.utils.iab.IabMain
import com.pitchedapps.frost.views.BadgedIcon
import com.pitchedapps.frost.views.FrostVideoViewer
import com.pitchedapps.frost.views.FrostViewPager
-import org.jetbrains.anko.doAsync
-import org.jetbrains.anko.uiThread
/**
* Created by Allan Wang on 20/12/17.
@@ -94,10 +92,30 @@ abstract class BaseMainActivity : BaseActivity(), MainActivityContract,
override var searchView: SearchView? = null
private val searchViewCache = mutableMapOf<String, List<SearchItem>>()
- private lateinit var controlWebview: WebView
+ private var controlWebview: WebView? = null
- override fun onCreate(savedInstanceState: Bundle?) {
+ override final fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
+ val start = System.currentTimeMillis()
+ setFrameContentView(Prefs.mainActivityLayout.layoutRes)
+ setFrostColors {
+ toolbar(toolbar)
+ themeWindow = false
+ header(appBar)
+ background(viewPager)
+ }
+ L.i { "Main AAA ${System.currentTimeMillis() - start} ms" }
+ setSupportActionBar(toolbar)
+ adapter = SectionsPagerAdapter(loadFbTabs())
+ viewPager.adapter = adapter
+ viewPager.offscreenPageLimit = TAB_COUNT
+ L.i { "Main BBB ${System.currentTimeMillis() - start} ms" }
+ L.i { "Main CCC ${System.currentTimeMillis() - start} ms" }
+ tabs.setBackgroundColor(Prefs.mainActivityLayout.backgroundColor())
+ onNestedCreate(savedInstanceState)
+ L.i { "Main finished loading UI in ${System.currentTimeMillis() - start} ms" }
+ controlWebview = WebView(this)
+ onCreateBilling()
if (BuildConfig.VERSION_CODE > Prefs.versionCode) {
Prefs.prevVersionCode = Prefs.versionCode
Prefs.versionCode = BuildConfig.VERSION_CODE
@@ -111,24 +129,15 @@ abstract class BaseMainActivity : BaseActivity(), MainActivityContract,
"Frost id" to Prefs.frostId)
}
}
- controlWebview = WebView(this)
- setFrameContentView(Prefs.mainActivityLayout.layoutRes)
- setSupportActionBar(toolbar)
- adapter = SectionsPagerAdapter(loadFbTabs())
- viewPager.adapter = adapter
- viewPager.offscreenPageLimit = TAB_COUNT
setupDrawer(savedInstanceState)
-
- setFrostColors {
- toolbar(toolbar)
- themeWindow = false
- header(appBar)
- background(viewPager)
- }
- tabs.setBackgroundColor(Prefs.mainActivityLayout.backgroundColor())
- onCreateBilling()
+ L.i { "Main started in ${System.currentTimeMillis() - start} ms" }
}
+ /**
+ * Injector to handle creation for sub classes
+ */
+ protected abstract fun onNestedCreate(savedInstanceState: Bundle?)
+
fun tabsForEachView(action: (position: Int, view: BadgedIcon) -> Unit) {
(0 until tabs.tabCount).asSequence().forEach { i ->
@@ -263,19 +272,20 @@ abstract class BaseMainActivity : BaseActivity(), MainActivityContract,
R.id.action_search to GoogleMaterial.Icon.gmd_search)
searchViewBindIfNull {
bindSearchView(menu, R.id.action_search, Prefs.iconColor) {
- textCallback = { query, _ ->
+ textCallback = { query, searchView ->
val results = searchViewCache[query]
if (results != null)
- runOnUiThread { searchView?.results = results }
- else
- doAsync {
- val data = SearchParser.query(FbCookie.webCookie, query)?.data?.results ?: return@doAsync
+ searchView.results = results
+ else {
+ val data = SearchParser.query(FbCookie.webCookie, query)?.data?.results
+ if (data != null) {
val items = data.map(FrostSearch::toSearchItem).toMutableList()
if (items.isNotEmpty())
items.add(SearchItem("${FbItem._SEARCH.url}?q=$query", string(R.string.show_all_results), iicon = null))
searchViewCache.put(query, items)
- uiThread { searchView?.results = items }
+ searchView.results = items
}
+ }
}
textDebounceInterval = 300
searchCallback = { query, _ -> launchWebOverlay("${FbItem._SEARCH.url}/?q=$query"); true }
@@ -351,12 +361,12 @@ abstract class BaseMainActivity : BaseActivity(), MainActivityContract,
override fun onResume() {
super.onResume()
- FbCookie.switchBackUser { }
- controlWebview.resumeTimers()
+ FbCookie.switchBackUser {}
+ controlWebview?.resumeTimers()
}
override fun onPause() {
- controlWebview.pauseTimers()
+ controlWebview?.pauseTimers()
L.v { "Pause main web timers" }
super.onPause()
}
@@ -371,7 +381,7 @@ abstract class BaseMainActivity : BaseActivity(), MainActivityContract,
override fun onDestroy() {
onDestroyBilling()
- controlWebview.destroy()
+ controlWebview?.destroy()
super.onDestroy()
}
diff --git a/app/src/main/kotlin/com/pitchedapps/frost/activities/ImageActivity.kt b/app/src/main/kotlin/com/pitchedapps/frost/activities/ImageActivity.kt
index cdde8311..e563ff8a 100644
--- a/app/src/main/kotlin/com/pitchedapps/frost/activities/ImageActivity.kt
+++ b/app/src/main/kotlin/com/pitchedapps/frost/activities/ImageActivity.kt
@@ -88,15 +88,18 @@ class ImageActivity : KauBaseActivity() {
val IMAGE_URL: String by lazy { intent.getStringExtra(ARG_IMAGE_URL).trim('"') }
- val TEXT: String? by lazy { intent.getStringExtra(ARG_TEXT) }
+ private val TEXT: String? by lazy { intent.getStringExtra(ARG_TEXT) }
// a unique image identifier based on the id (if it exists), and its hash
- val IMAGE_HASH: String by lazy { "${Math.abs(FB_IMAGE_ID_MATCHER.find(IMAGE_URL)[1]?.hashCode() ?: 0)}_${Math.abs(IMAGE_URL.hashCode())}" }
+ private val IMAGE_HASH: String by lazy {
+ "${Math.abs(FB_IMAGE_ID_MATCHER.find(IMAGE_URL)[1]?.hashCode() ?: 0)}_${Math.abs(IMAGE_URL.hashCode())}"
+ }
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
intent?.extras ?: return finish()
L.i { "Displaying image" }
+ L.v { "Displaying image $IMAGE_URL" }
val layout = if (!TEXT.isNullOrBlank()) R.layout.activity_image else R.layout.activity_image_textless
setContentView(layout)
container.setBackgroundColor(Prefs.bgColor.withMinAlpha(222))
@@ -116,6 +119,8 @@ class ImageActivity : KauBaseActivity() {
override fun onImageLoadError(e: Exception?) {
errorRef = e
e.logFrostAnswers("Image load error")
+ L.e { "Failed to load image $IMAGE_URL" }
+ tempFile?.delete()
fabAction = FabStates.ERROR
}
})
@@ -125,9 +130,12 @@ class ImageActivity : KauBaseActivity() {
doAsync({
L.e(it) { "Failed to load image $IMAGE_HASH" }
errorRef = it
+ runOnUiThread { progress.fadeOut() }
+ tempFile?.delete()
fabAction = FabStates.ERROR
}) {
loadImage { file ->
+ uiThread { progress.fadeOut() }
if (file == null) {
fabAction = FabStates.ERROR
return@loadImage
@@ -153,11 +161,7 @@ class ImageActivity : KauBaseActivity() {
L.d { "Loading from local cache ${local.absolutePath}" }
return callback(local)
}
- val response = Request.Builder()
- .url(IMAGE_URL)
- .get()
- .call()
- .execute()
+ val response = getImageResponse()
if (!response.isSuccessful) {
L.e { "Unsuccessful response for image" }
@@ -198,14 +202,16 @@ class ImageActivity : KauBaseActivity() {
return File.createTempFile(imageFileName, IMG_EXTENSION, frostDir)
}
+ private fun getImageResponse() = Request.Builder()
+ .url(IMAGE_URL)
+ .get()
+ .call()
+ .execute()
+
@Throws(IOException::class)
private fun downloadImageTo(file: File) {
- val body = Request.Builder()
- .url(IMAGE_URL)
- .get()
- .call()
- .execute()
- .body() ?: throw IOException("Failed to retrieve image body")
+ val body = getImageResponse().body()
+ ?: throw IOException("Failed to retrieve image body")
body.byteStream().use { input ->
file.outputStream().use { output ->
input.copyTo(output)
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 e672d7d8..d153b5d9 100644
--- a/app/src/main/kotlin/com/pitchedapps/frost/activities/MainActivity.kt
+++ b/app/src/main/kotlin/com/pitchedapps/frost/activities/MainActivity.kt
@@ -17,10 +17,9 @@ class MainActivity : BaseMainActivity() {
var lastPosition = -1
val headerBadgeObservable = PublishSubject.create<String>()!!
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- setupViewPager()
+ override fun onNestedCreate(savedInstanceState: Bundle?) {
setupTabs()
+ setupViewPager()
}
private fun setupViewPager() {
@@ -63,7 +62,8 @@ class MainActivity : BaseMainActivity() {
(tab.customView as BadgedIcon).badgeText = null
}
})
- headerBadgeObservable.throttleFirst(15, TimeUnit.SECONDS).subscribeOn(Schedulers.newThread())
+ headerBadgeObservable.throttleFirst(15, TimeUnit.SECONDS)
+ .subscribeOn(Schedulers.newThread())
.map { Jsoup.parse(it) }
.filter { it.select("[data-sigil=count]").size >= 0 } //ensure headers exist
.map {
diff --git a/app/src/main/kotlin/com/pitchedapps/frost/activities/WebOverlayActivity.kt b/app/src/main/kotlin/com/pitchedapps/frost/activities/WebOverlayActivity.kt
index 1bd3ede2..9fe4ae22 100644
--- a/app/src/main/kotlin/com/pitchedapps/frost/activities/WebOverlayActivity.kt
+++ b/app/src/main/kotlin/com/pitchedapps/frost/activities/WebOverlayActivity.kt
@@ -84,7 +84,7 @@ class FrostWebActivity : WebOverlayActivityBase(false) {
} else {
L.i { "Sharing url through overlay" }
L._i { "Url: $url" }
- intent.putExtra(ARG_URL, "${FB_URL_BASE}/sharer/sharer.php?u=$url")
+ intent.putExtra(ARG_URL, "${FB_URL_BASE}sharer/sharer.php?u=$url")
return true
}
}
@@ -154,7 +154,6 @@ open class WebOverlayActivityBase(private val forceBasicAgent: Boolean) : BaseAc
coordinator.setBackgroundColor(Prefs.bgColor.withAlpha(255))
content.bind(this)
- web.reloadBase(true)
content.titleObservable
.observeOn(AndroidSchedulers.mainThread())
@@ -175,7 +174,7 @@ open class WebOverlayActivityBase(private val forceBasicAgent: Boolean) : BaseAc
}
FrostRunnable.propagate(this, intent)
- L.e { "Done propagation" }
+ L.v { "Done propagation" }
kauSwipeOnCreate {
if (!Prefs.overlayFullScreenSwipe) edgeSize = 20.dpToPx
@@ -190,8 +189,8 @@ open class WebOverlayActivityBase(private val forceBasicAgent: Boolean) : BaseAc
*/
override fun onNewIntent(intent: Intent) {
super.onNewIntent(intent)
- val newUrl = (intent.getStringExtra(ARG_URL) ?: intent.dataString ?: return).formattedFbUrl
L.d { "New intent" }
+ val newUrl = (intent.getStringExtra(ARG_URL) ?: intent.dataString)?.formattedFbUrl ?: return
if (baseUrl != newUrl) {
this.intent = intent
content.baseUrl = newUrl